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 相关文章推荐
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
Apr 07 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
Jan 10 Javascript
javascript格式化json显示实例分析
Apr 21 Javascript
Jquery使用val方法读写value值
May 18 Javascript
HTML5实现留言和回复页面样式
Jul 22 Javascript
WEB 前端开发中防治重复提交的实现方法
Oct 26 Javascript
js自定义弹框插件的封装
Aug 24 Javascript
原生JS实现Ajax跨域请求flask响应内容
Oct 24 Javascript
详解layui中的树形关于取值传值问题
Jan 16 Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 Javascript
Vue触发式全局组件构建的方法
Nov 28 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
Apr 10 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
用mysql触发器自动更新memcache的实现代码
2009/10/11 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
PHP按一定比例压缩图片的方法
2018/10/12 PHP
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
jquery实现当滑动到一定位置时固定效果
2014/06/17 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
2015/05/28 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
Vue对象赋值视图不更新问题及解决方法
2019/06/03 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
vue3.0实现插件封装
2020/12/14 Vue.js
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python探索之创建二叉树
2017/10/25 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
pytorch之添加BN的实现
2020/01/06 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
2020/03/14 Python
python实现图像外边界跟踪操作
2020/07/13 Python
如何查看python关键字
2021/01/17 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
美国最大的旗帜经销商:Carrot-Top
2018/02/26 全球购物
外语专业毕业生个人的自荐信
2013/11/19 职场文书
公司培训欢迎词
2014/01/10 职场文书
五一服装活动方案
2014/01/11 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书
2015年行政人事工作总结
2015/05/21 职场文书