Vue列表页渲染优化详解


Posted in Javascript onJuly 24, 2017

vue列表页渲染优化,具体内容如下

想法

初始化时,vue会对data做getter、setter改造,在现代浏览器里,虽然JS已经足够快,但仍然有优化空间。

列表页的数据结构为:

list: [
    // 每一项有不同的来源,不同来源的数据都不同,因此放到一个数组里
    [{
      sourceId: 'xmla', // 来源的唯一标识
      id: 3001, // 资源的唯一标识
      source: '喜马拉雅', // 来源
      title: '昆曲之牡丹亭',
      imageUrl: 'http://x.baidu.com/x.gif',
      album: 0, // 是否是专辑
      hot: 1345,
      anchor: '青雪'
    }, {
      sourceId: 'xmla', // 来源的唯一标识
      id: 3005, // 资源的唯一标识
      source: '手机百度', // 来源
      title: '昆曲之牡丹亭',
      imageUrl: 'http://x.baidu.com/x.gif',
      album: 0, // 是否是专辑
      hot: 1345,
      anchor: '青雪'
    }],
    [{
      sourceId: 'xmla',
      id: 3002, // 资源的唯一标识
      source: '喜马拉雅', // 来源
      title: '昆曲之春江花月夜',
      imageUrl: 'http://x.baidu.com/x.gif',
      album: 0, // 是否是专辑
      hot: 1345,
      anchor: '青雪'
    }],
  ]
}

Vue会给数组中的每个值设置getter和setter来监听它们的变动

但其实列表数据是不会发生变化的,这些操作是多余的。

方法一:使用Object.freeze()

Object.freeze()是ES5新增的API,用来冻结一个对象,禁止对象被修改。vue 1.0.18+以后,不会对已冻结的data做getter、setter转换。

如果确保某个data不需要跟踪依赖,可以使用Object.freeze将其冻结。需要注意的是,被冻结的是对象的值,仍然可以将引用整个替换调。看下面例子:

<p v-for="item in list">{{ item.value }}</p>
new Vue({
  data: {
    // vue不会对list里的object做getter、setter绑定
    list: Object.freeze([
      { value: 1 },
      { value: 2 }
    ])
  },
  created () {
    // 界面不会有响应
    this.list[0].value = 100;

    // 下面两种做法,界面都会响应
    this.list = [
      { value: 100 },
      { value: 200 }
    ];
    this.list = Object.freeze([
      { value: 100 },
      { value: 200 }
    ]);
  }
})

当使用Vuex进行状态管理时,应当在给state.xxx赋值前使用Object.freeze():

[LIST_INIT](state, {list}) {
  Object.freeze(list);
  state.list = list;
},

getter和setter没有了。

方法二:传string方法

由于从后端取回的数据本身为字符串,不进行JSON.parse()直接存在state中,即可阻止Vue的改造。
使用时,在页面组件中引入字符串,JSON.parse()后可以直接赋值给this.XXX,如有需要还可以进一步子组件。

this.test = {
  a:{
    c:1,
    d:2
  },
  b:2
}
<list-item :test="test.a"></list-item>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery UI DatePicker中z-index默认为1的解决办法
Sep 28 Javascript
node.js开机自启动脚本文件
Dec 24 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
Apr 05 Javascript
js console.log打印对像与数组用法详解
Jan 21 Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
通俗易懂地解释JS中的闭包
Oct 23 Javascript
Bootstrap框架建立树形菜单(Tree)的实例代码
Oct 30 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
Feb 13 Javascript
详解vue-cli3 中跨域解决方案
Apr 10 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
Mar 16 Javascript
ant design vue导航菜单与路由配置操作
Oct 28 Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 #Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 #Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 #Javascript
在React中如何优雅的处理事件响应详解
Jul 24 #Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
Jul 24 #Javascript
想用好React的你必须要知道的一些事情
Jul 24 #Javascript
利用node.js实现反向代理的方法详解
Jul 24 #Javascript
You might like
用函数读出数据表内容放入二维数组
2006/10/09 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
laravel自定义分页效果
2017/07/23 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
javascript每日必学之多态
2016/02/23 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
JavaScript常见事件处理程序实例总结
2019/01/05 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Python中的装饰器用法详解
2015/01/14 Python
Python可跨平台实现获取按键的方法
2015/03/05 Python
Python实现CET查分的方法
2015/03/10 Python
Python基于回溯法子集树模板解决全排列问题示例
2017/09/07 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
django解决跨域请求的问题
2018/11/11 Python
浅谈Python中的全局锁(GIL)问题
2019/01/11 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python判断字符串是否为空和null方法实例
2020/04/26 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
统计学专业毕业生的自我评价分享
2013/11/28 职场文书
银行求职推荐信范文
2013/11/30 职场文书
网络管理员岗位职责
2014/03/17 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
法制教育观后感
2015/06/17 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android