如何提升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解密入门 最终变量劫持
Jun 25 Javascript
jQuery Animation实现CSS3动画示例介绍
Aug 14 Javascript
jQuery中的pushStack实现原理和应用实例
Feb 03 Javascript
jQuery自动添加表单项的方法
Jul 13 Javascript
jQuery鼠标事件汇总
Aug 30 Javascript
js的各种排序算法实现(总结)
Jul 23 Javascript
BootStrap轻松实现微信页面开发代码分享
Oct 21 Javascript
整理关于Bootstrap排版的慕课笔记
Mar 29 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
React组件之间的通信的实例代码
Jun 27 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
vue el-upload上传文件的示例代码
Dec 21 Vue.js
配置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加密函数 Javascript/Js 解密函数
2013/09/23 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(七)
2014/06/23 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
永不消失的title提示代码
2007/02/15 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
基于JQuery的Ajax方法使用详解
2017/08/16 jQuery
jQuery EasyUI 选项卡面板tabs的使用实例讲解
2017/12/25 jQuery
javascript数组拍平方法总结
2018/01/20 Javascript
浅析node应用的timing-attack安全漏洞
2018/02/28 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
详解在vue-test-utils中mock全局对象
2018/11/07 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
python刷投票的脚本实现代码
2014/11/08 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
优秀实习生感言
2014/03/01 职场文书
庆七一宣传标语
2014/10/08 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
Python上下文管理器Content Manager
2021/06/26 Python