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 相关文章推荐
一个选择最快的服务器转向代码
Apr 27 Javascript
JavaScript Date对象使用总结
May 14 Javascript
jquery select操作的日期联动实现代码
Dec 06 Javascript
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 Javascript
通过length属性判断jquery对象是否存在
Oct 18 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
JQuery右键菜单插件ContextMenu使用指南
Dec 19 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
Dec 04 Javascript
详解vue-Resource(与后端数据交互)
Jan 16 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
Nov 16 Javascript
Angular @HostBinding()和@HostListener()用法
Mar 05 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 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函数代码
2013/08/29 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
php中spl_autoload详解
2014/10/17 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
浅析在javascript中创建对象的各种模式
2016/05/06 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
python显示天气预报
2014/03/02 Python
python自定义类并使用的方法
2015/05/07 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
大学生优秀的自我评价分享
2013/10/22 职场文书
经理管理专业自荐信范文
2013/12/31 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
年终总结会主持词
2014/03/25 职场文书
护士实习求职信
2014/06/22 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
医生个人年度总结
2015/02/28 职场文书
个人收入证明格式
2015/06/24 职场文书
python spilt()分隔字符串的实现示例
2021/05/21 Python
Golang表示枚举类型的详细讲解
2021/09/04 Golang
SQL CASE 表达式的具体使用
2022/03/21 SQL Server
MySQL插入数据与查询数据
2022/03/25 MySQL