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小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
Jul 25 Javascript
jquery实现树形二级菜单实例代码
Nov 20 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
Jan 15 Javascript
js原型继承的两种方法对比介绍
Mar 30 Javascript
javascript每日必学之多态
Feb 23 Javascript
JavaScript中0和&quot;&quot;比较引发的问题
May 26 Javascript
JS中对数组元素进行增删改移的方法总结
Dec 15 Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
Apr 04 jQuery
利用JS对iframe父子(内外)页面进行操作的方法教程
Jun 15 Javascript
jQuery each和js forEach用法比较
Feb 27 jQuery
详解Vue数据驱动原理
Nov 17 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下正则来匹配dede模板标签的代码
2010/08/21 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
2016/01/04 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
静态的动态续篇之来点XML
2006/12/23 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
JQUERY获取form表单值的代码
2010/07/17 Javascript
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Python实现代码统计工具
2019/09/19 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
《二泉映月》教学反思
2014/04/15 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
父亲节活动总结
2015/02/12 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
老干部座谈会主持词
2015/07/03 职场文书
创业计划书之水果店
2019/07/18 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python