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 相关文章推荐
在页面中js获取光标/鼠标的坐标及光标的像素坐标
Nov 11 Javascript
Node.js制作简单聊天室
Jan 12 Javascript
ES6中Iterator与for..of..遍历用法分析
Mar 31 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
JS中原始值和引用值的储存方式示例详解
Mar 23 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
Vue实现微信支付功能遇到的坑
Jun 05 Javascript
微信小程序如何利用getCurrentPages进行页面传值
Jul 01 Javascript
mpvue实现左侧导航与右侧内容的联动
Oct 21 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 Vue.js
uniapp开发打包多端应用完整方法指南
Dec 24 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
php抓取https的内容的代码
2010/04/06 PHP
过滤掉PHP数组中的重复值的实现代码
2011/07/17 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
php不用正则验证真假身份证
2013/11/06 PHP
zf框架的校验器InArray使用示例
2014/03/13 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
21个值得收藏的Javascript技巧
2014/02/04 Javascript
JavaScript实现简单图片滚动附源码下载
2014/06/17 Javascript
jQuery中scrollTop()方法用法实例
2015/01/16 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
vue移动端监听滚动条高度的实现方法
2018/09/03 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
js作用域和作用域链及预解析
2019/04/11 Javascript
vue实现表单录入小案例
2019/09/27 Javascript
Vue学习之axios的使用方法实例分析
2020/01/06 Javascript
JS实现简易图片自动轮播
2020/10/16 Javascript
django中静态文件配置static的方法
2018/05/20 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
Python逐行读取文件中内容的简单方法
2019/02/26 Python
Django--权限Permissions的例子
2019/08/28 Python
python绘制雪景图
2019/12/16 Python
python如何查看安装了的模块
2020/06/23 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
请解释在new与override的区别
2012/10/29 面试题
如何转换一个字符串到enum值
2014/04/12 面试题
个性大学生自我评价
2013/12/04 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
部队2015年终工作总结
2015/04/02 职场文书
用Python提取PDF表格的方法
2021/04/11 Python