如何提升vue.js中大型数据的性能


Posted in Javascript onJune 21, 2019

你好!欢迎大家访问VueDose的第一篇文章!我们在VueDose中开始冒险吧,你会喜欢这些对你有帮助的小技巧。

VueDose的所有的文章都非常的简洁,我相信人们在这种格式下更容易找到有用的东西。所以,让我们直奔主题。

通常我们需要获取对象数据,比如用户,项目,文章,等等等等·····

有时,我们甚至不需要修改它们,只是为了展示它们或在(a.k.a. Vuex)中存贮它们的全局状态。那么获取这个数据的简单代码如下:

export default {
data: () => ({
users: {}
}),
async created() {
const users = await axios.get("/api/users");
this.users = users;
}
};

Vue会自动循环数组的每个对象,并对每个一级属性进行响应。

对于大型数组对象来说这是一个昂贵的做法。是的,有时候你可以把这些数据分页,但是,其他人就能从前端拿到你整个数据。

谷歌地图标记通常就是这种情况,事实上它们是一个巨大的对象。

所以,在这些情况下,如果能够阻止Vue对这个数据的反应机制,我们可以获得一些性能上的提升。我们可以在添加到组件之前使用 Object.freeze 来处理数据实现这一点:

export default {
data: () => ({
users: {}
}),
async created() {
const users = await axios.get("/api/users");
this.users = Object.freeze(users);
}
};

这个也同样适用于 Vuex:

const mutations = {
setUsers(state, users) {
state.users = Object.freeze(users);
}
};

顺便说一下,如果你想要修改数组,你可以创建一个新数组来实现。列如,在原有上添加数据项,你可以这样做:

state.users = Object.freeze([...state.users, user]);

你想知道性能提升多少?我们会在下一篇文章看到它,所以,请继续关注。

今天就到这里了!希望你会喜欢这第一篇文章

理解

这篇文章说的内容主要是如果你确定数据是纯展示用的,如果你一次请求的数据特别大的话,那么可以用 Object.freeze 来冻结你的数据,冻结了数据之后会阻止Vue的默认响应机制,会提高Vue的性能。

Object.freeze()的定义:

Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

结尾

水平有限,难免有错漏之处,望各位大大轻喷的同时能够指出,跪谢!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js实现预览待上传的本地图片
Mar 15 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
Jul 30 Javascript
jQuery布局插件UI Layout简介及使用方法
Apr 03 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
Nov 17 Javascript
Angularjs中UI Router全攻略
Jan 29 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
js判断checkbox是否选中个数的方法(超简单)
Aug 19 Javascript
小程序视频列表中视频的播放与停止的示例代码
Jul 20 Javascript
微信小程序入门之指南针
Oct 22 Javascript
antd-DatePicker组件获取时间值,及相关设置方式
Oct 27 Javascript
vue + el-form 实现的多层循环表单验证
Nov 25 Vue.js
JS中锚点链接点击平滑滚动并自由调整到顶部位置
Feb 06 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
Jun 21 #Javascript
微信小程序实现点击效果
Jun 21 #Javascript
JS利用prototype给类添加方法操作详解
Jun 21 #Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
Jun 21 #Javascript
微信小程序实现弹出菜单动画
Jun 21 #Javascript
js类的继承定义与用法分析
Jun 21 #Javascript
js中值引用和地址引用实例分析
Jun 21 #Javascript
You might like
解析thinkphp中的导入文件标签
2013/06/20 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
js单独获取一个checkbox看其是否被选中
2014/09/22 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
python实现图片批量剪切示例
2014/03/25 Python
python将文本转换成图片输出的方法
2015/04/28 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
python代码实现ID3决策树算法
2017/12/20 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
Python的几种主动结束程序方式
2019/11/22 Python
python super函数使用方法详解
2020/02/14 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
Selenium环境变量配置(火狐浏览器)及验证实现
2020/12/07 Python
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
什么是TCP/IP
2014/07/27 面试题
生日寄语大全
2014/04/08 职场文书
技术合作协议书范本
2014/04/18 职场文书
科学育儿宣传标语
2014/10/08 职场文书
作风建设整改方案
2014/10/27 职场文书
公司员工管理制度
2015/08/04 职场文书
采购部年度工作总结
2015/08/13 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android