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 相关文章推荐
Save a File Using a File Save Dialog Box
Jun 18 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
Jun 11 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
Nov 28 Javascript
js实现jquery的offset()方法实例
Jan 10 Javascript
jquery实现不包含当前项的选择器实例
Jun 25 Javascript
微信小程序 toast 详解及实例代码
Nov 09 Javascript
EasyUI中的dataGrid的行内编辑
Jun 22 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
Jul 03 Javascript
js实现随机点名小功能
Aug 17 Javascript
vue环形进度条组件实例应用
Oct 10 Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
Aug 14 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启用zlib压缩文件的配置方法
2013/06/12 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
JavaScript数值数组排序示例分享
2014/05/27 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
深入理解Vue 的钩子函数
2018/09/05 Javascript
vue中选项卡点击切换且能滑动切换功能的实现代码
2018/11/25 Javascript
[原创]微信小程序获取网络类型的方法示例
2019/03/01 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
2019/09/02 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
Centos7 Python3下安装scrapy的详细步骤
2018/03/15 Python
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
Python基于多线程操作数据库相关问题分析
2018/07/11 Python
浅谈python多进程共享变量Value的使用tips
2019/07/16 Python
python用Configobj模块读取配置文件
2020/09/26 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
Snapfish英国:在线照片打印和个性化照片礼品
2017/01/13 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
无毒社区工作方案
2014/05/23 职场文书
计算机毕业生求职信
2014/06/10 职场文书
学雷锋标语
2014/06/25 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
避暑山庄导游词
2015/02/04 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
Python简易开发之制作计算器
2022/04/28 Python