内容简介:特别声明:本文是作者Alex Jover 发布在VueDose 上的一个系列。版权归作者所有。译者在翻译前已经和作者沟通得到了翻译整个系列的授权。
特别声明:本文是作者Alex Jover 发布在VueDose 上的一个系列。
版权归作者所有。
译者在翻译前已经和作者沟通得到了翻译整个系列的授权。
为了不影响大家阅读,获得授权的记录会放在本文的最后。
嗨,大家好!欢迎来到 VueDose 的第一篇文章。我已经准备好在 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]); 复制代码
或许你会忍不住想问,这个操作到底能够带来多大的性能提升呀?具体的我们详见下一篇文章,请继续关注!
这就是今天的所有内容,我希望你能够喜欢 :stuck_out_tongue:。
你可以在线阅读这篇原文,里面有可复制粘贴的源代码。如果你喜欢这个系列的话,请分享给你的同事们!
以上所述就是小编给大家介绍的《【译】Vue 的小奇技(第一篇):提高大型数据列表的性能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 听说,加缓存能提高性能?
- Web 性能优化:缓存 React 事件来提高性能
- Golang 性能提高技术----低级优化
- 五招帮您提高网站性能
- 索引为什么能提高查询性能
- 使用 Traefik 提高 WebSocket 应用性能
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Flash ActionScript 3.0从入门到精通
章精设、胡登涛 / 清华大学出版社 / 2008-10-1 / 69.00元
Flash ActionScript 3.0的出现,不仅从形式上改变了ActionScript,而且从本质上改变了ActionScript,使ActionScript 3.0成为了真正的面向对象编程语言。 本书从最简单的编程知识出发,带领读者走进编程的大门,是一本不可多得的ActionScript 3.0入门书。本书在注重基础的同时,从更高的层次来介绍ActionScript 3.0的面向对......一起来看看 《Flash ActionScript 3.0从入门到精通》 这本书的介绍吧!