如何提升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 相关文章推荐
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
JS生成随机字符串的多种方法
Jun 10 Javascript
PHP结合jQuery实现的评论顶、踩功能
Jul 22 Javascript
浅谈javascript获取元素transform参数
Jul 24 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
解析javascript瀑布流原理实现图片滚动加载
Mar 10 Javascript
js中class的点击事件没有效果的解决方法
Oct 13 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
Feb 05 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
Sep 19 Javascript
angular6 填坑之sdk的方法
Dec 27 Javascript
Vue 组件的挂载与父子组件的传值实例
Sep 02 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的urlencode()URL编码函数浅析
2011/08/09 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
删除节点的jquery代码
2014/01/13 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
基于打包工具Webpack进行项目开发实例
2018/05/29 Javascript
vue-content-loader内容加载器的使用方法
2018/08/05 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
详解vscode中vue代码颜色插件
2018/10/11 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
Python中变量交换的例子
2014/08/25 Python
讲解Python中for循环下的索引变量的作用域
2015/04/15 Python
Python执行时间的计算方法小结
2017/03/17 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
python下载的库包存放路径
2020/07/27 Python
Python基于template实现字符串替换
2020/11/27 Python
违反学校规定检讨书
2014/01/18 职场文书
五型班组建设方案
2014/02/10 职场文书
教师师德考核自我评价
2014/09/13 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
汽车车尾标语大全
2015/08/11 职场文书