如何提升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 相关文章推荐
javascript面向对象的方式实现的弹出层效果代码
Jan 28 Javascript
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
为jQuery添加Webkit的触摸的方法分享
Feb 02 Javascript
JavaScript实现找质数代码分享
Mar 24 Javascript
jQuery 1.9.1源码分析系列(十三)之位置大小操作
Dec 02 Javascript
js实现人民币大写金额形式转换
Apr 27 Javascript
浅谈javascript中的加减时间
Jul 12 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 jQuery
layui 选择列表,打勾,点击确定返回数据的例子
Sep 02 Javascript
微信小程序实现点击卡片 翻转效果
Sep 04 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
Sep 27 Javascript
详解阿里Node.js技术文档之process模块学习指南
Jan 04 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
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
实用函数8
2007/11/08 PHP
PHP 实例化类的一点摘记
2008/03/23 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
2014/09/01 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
2019/04/16 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
Python生成器以及应用实例解析
2018/02/08 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
英国香水店:The Perfume Shop
2017/03/27 全球购物
一套VC试题
2015/01/23 面试题
StringBuilder和String的区别
2015/05/18 面试题
道德大讲堂实施方案
2014/05/14 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
月考总结与反思
2015/10/22 职场文书
php引用传递
2021/04/01 PHP
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js