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 Array.sort() 跨浏览器下需要考虑的问题
Dec 07 Javascript
无缝滚动js代码通俗易懂(自写)
Jun 19 Javascript
理解jQuery stop()方法
Nov 21 Javascript
JavaScript中window.showModalDialog()用法详解
Dec 18 Javascript
推荐一款jQuery插件模板
Jan 09 Javascript
JS实现的合并多个数组去重算法示例
Apr 11 Javascript
用Vue写一个分页器的示例代码
Apr 22 Javascript
原生JS实现的轮播图功能详解
Aug 06 Javascript
react 应用多入口配置及实践总结
Oct 17 Javascript
JavaScript一元正号运算符示例代码
Jun 30 Javascript
vue axios请求成功却进入catch的原因分析
Sep 08 Javascript
AJAX检测用户名是否存在的方法
Mar 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
php 文件夹删除、php清除缓存程序
2009/08/25 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
优化PHP程序的方法小结
2012/02/23 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
js滚轮事件兼容性问题需要注意哪些
2016/11/15 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
Vue2.x中的Render函数详解
2017/05/30 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
基于pandas中expand的作用详解
2019/12/17 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
什么是跨站脚本攻击
2014/12/11 面试题
社区居务公开实施方案
2014/03/27 职场文书
大学奖学金获奖感言
2014/08/15 职场文书
企业挂职心得体会
2014/09/10 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript
Golang map映射的用法
2022/04/22 Golang