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 live
May 15 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
Oct 27 Javascript
javascript-简单的日历实现及Date对象语法介绍(附图)
May 30 Javascript
浅谈javascript的调试
Jan 28 Javascript
jquery利用命名空间移除绑定事件的方法
Mar 11 Javascript
jQuery实现仿百度帖吧头部固定导航效果
Aug 07 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
Dec 08 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
JS实现可切换图片的幻灯切换效果示例
May 24 Javascript
JS+DIV实现拖动效果
Feb 11 Javascript
基于vue hash模式微信分享#号的解决
Sep 07 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
php格式化电话号码的方法
2015/04/24 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
js图片模糊切换显示特效的方法
2015/02/17 Javascript
JavaScipt中栈的实现方法
2016/02/17 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
vue 移动端适配方案详解
2018/11/15 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
如何在postman测试用例中实现断言过程解析
2020/07/09 Javascript
基于vue的video播放器的实现示例
2021/02/19 Vue.js
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
pytorch快速搭建神经网络_Sequential操作
2020/06/17 Python
python字典key不能是可以是啥类型
2020/08/04 Python
python list的index()和find()的实现
2020/11/16 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
家具厂厂长岗位职责
2014/01/01 职场文书
会计自我鉴定
2014/02/04 职场文书
伊琍体标语
2014/06/25 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
五好家庭申报材料
2014/12/20 职场文书
2015年司法局工作总结
2015/05/22 职场文书
学校证明范文
2015/06/24 职场文书
外出学习心得体会范文
2016/01/18 职场文书
看古人们是如何赞美老师的?
2019/07/08 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
理解python中装饰器的作用
2021/07/21 Python
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏