博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【译】Vue 的小奇技(第一篇):提高大型数据列表的性能
阅读量:6261 次
发布时间:2019-06-22

本文共 1471 字,大约阅读时间需要 4 分钟。

  • 原文地址:
  • 原文作者:
  • 译者:

特别声明:本文是作者 发布在 上的一个系列。

版权归作者所有。

译者在翻译前已经和作者沟通得到了翻译整个系列的授权。

为了不影响大家阅读,获得授权的记录会放在本文的最后。

嗨,大家好!欢迎来到 VueDose 的第一篇文章。我已经准备好在 VueDose 上开启这段旅程,来帮助像你一样的开发者们来学习一些厉害的技巧。

首先,在 上发布的文章都是很简洁明了的,因为我相信这样的行文风格对于读者来说会更有帮助,所以我们现在就直接开始吧。

正文内容

通常我们在应用中会请求一些列表数据,比如说用户列表、商品列表、文章列表等等......

而且有时候,我们并不会去修改这些请求回来的列表数据,而只是单纯地去展示它们,或者是把它们保存在全局状态管理器里面(又称之为 Vuex)。请求数据列表的示意代码如下所示:

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

Vue 在默认情况下,会将数组 this.users 中的,所有对象的第一层属性设置为响应式数据。

这对于大型的对象数组来说,性能成本非常的高。没错,的确有时候列表数据是有分页的,但总会有一些情况下,是没有进行分页,继而在前端展示的。

一个实际的例子就是谷歌地图的标记点 markers 列表数据,这就是一个拥有很多对象的大型数组。

所以,在一些特定的情况下,如果我们能够阻止 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]);复制代码

或许你会忍不住想问,这个操作到底能够带来多大的性能提升呀?具体的我们详见下一篇文章,请继续关注!

这就是今天的所有内容,我希望你能够喜欢 ?。

你可以在线阅读这篇 ,里面有可复制粘贴的源代码。如果你喜欢这个系列的话,请分享给你的同事们!

结语

此系列的其他文章,会同步系列官网的发布情况,及时地翻译发布到掘金。请持续关注,相信我会给大家带来更多优质的内容,不要忘了点赞~

如果想要了解我的更多,请查阅如下:

  • 个人博客:
  • 个人 github 仓库:
  • 个人微信公众号:搜索「程序猿何大叔」

请求翻译授权记录

转载地址:http://rukpa.baihongyu.com/

你可能感兴趣的文章
Java8新特性--日期和时间API
查看>>
python itertools
查看>>
Eclipse自动补全+常用快捷键
查看>>
Dubbo 浅读
查看>>
payload有效载荷(转)
查看>>
利用谷歌控制台console调用后台代码
查看>>
jquery 点击按钮实现listbox的显示与隐藏,点击其他地方按钮外的地方,隐藏listbox...
查看>>
CSS3 盒阴影(box-shadow)详解
查看>>
PHP基础之 file_get_contents() 函数
查看>>
跨站请求伪造攻击 CSRF
查看>>
strace
查看>>
linux mysql命令
查看>>
CentOS+Nginx+PHP+MySQL详细配置(图解)
查看>>
冲刺(5)
查看>>
SQL判断字段列是否存在
查看>>
LeetCode - Find Duplicate Subtrees
查看>>
搭建android开发环境Android Studio
查看>>
求$y=Asin(\omega x+\phi)+k$类的解析式
查看>>
用PROCEDURE ANALYSE优化MYSQL表结构
查看>>
从4个方面提高用户体验
查看>>