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 相关文章推荐
createElement动态创建HTML对象脚本代码
Nov 24 Javascript
javascript正则表达式中参数g(全局)的作用
Nov 11 Javascript
通过jQuery源码学习javascript(二)
Dec 27 Javascript
For循环中分号隔开的3部分的执行顺序探讨
May 27 Javascript
js实现符合国情的日期插件详解
Jan 19 Javascript
js每隔两秒输出数组中的一项(实例)
May 28 Javascript
微信小程序wx.previewImage预览图片实例详解
Dec 07 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
JavaScript继承定义与用法实践分析
May 28 Javascript
详解React native fetch遇到的坑
Aug 30 Javascript
ES5和ES6中类的区别总结
Dec 21 Javascript
vue 使用饿了么UI仿写teambition的筛选功能
Mar 01 Vue.js
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使用cookie实现记住登录状态
2015/04/27 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
2019/05/31 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
2019/10/03 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
seajs实现强制刷新本地缓存的方法分析
2017/10/16 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
Vue仿支付宝支付功能
2018/05/25 Javascript
详解vue 项目白屏解决方案
2018/10/31 Javascript
python 提取文件的小程序
2009/07/29 Python
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
法国购买二手电子产品网站:Asgoodasnew
2020/03/27 全球购物
外贸业务员求职自荐信分享
2013/09/21 职场文书
优秀教师单行材料
2014/12/16 职场文书
2014年纳税评估工作总结
2014/12/23 职场文书
项目负责人岗位职责
2015/02/15 职场文书
国富论读书笔记
2015/06/26 职场文书
家访教师心得体会
2016/01/23 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js