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动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
JS修改iframe页面背景颜色的方法
Apr 01 Javascript
Seajs是什么及sea.js 由来,特点以及优势
Oct 13 Javascript
jsTree使用记录实例
Dec 01 Javascript
Javascript中prototype与__proto__的关系详解
Mar 11 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
vue 界面刷新数据被清除 localStorage的使用详解
Sep 16 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
Nov 02 Javascript
微信小程序顶部导航栏可滑动并选中放大
Dec 05 Javascript
js滚轮事件 js自定义滚动条的实现
Jan 18 Javascript
JS如何实现手机端输入验证码效果
May 13 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
截获网站title标签之家内容的例子
2006/10/09 PHP
php中iconv函数使用方法
2008/05/24 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
js打造数组转json函数
2015/01/14 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
全面解析Javascript无限添加QQ好友原理
2016/06/15 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
Python的面向对象思想分析
2015/01/14 Python
python 异或加密字符串的实例
2018/10/14 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
CSS3 animation ? steps 函数详解
2019/08/30 HTML / CSS
省级四好少年事迹材料
2014/01/25 职场文书
服务标语大全
2014/06/18 职场文书
2014年度党员自我评议
2014/09/13 职场文书
党员民主生活会材料
2014/12/15 职场文书
感恩的心主题班会
2015/08/12 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android