光之晨曦🌟🌟🌟

vuePress-theme-reco 晨曦    2021 - 2022
光之晨曦🌟🌟🌟 光之晨曦🌟🌟🌟

Choose mode

  • dark
  • auto
  • light
首页
前端开发
  • CSS
  • FrontEnd
  • GraphQL
  • JS基础语法
  • JavaScript
  • TypeScript
  • Vue
  • Webpack
  • 数据结构与算法
  • 浏览器相关
  • 推荐文档
JS指南
  • JS基础相关
  • ECMAScript 6
  • OOP面向对象编程
  • JavaScript设计模式
前端框架
  • Vue相关

    • Vue基础相关
    • Vue官方生态
    • Vue.js的设计核心
性能优化
  • 前端缓存

    • HTTP缓存
    • 数据缓存
    • 离线缓存
    • CDN缓存
  • 优化方案

    • SEO方向的优化方案
    • Webpack的性能优化
    • Canvas性能优化方案
    • 了解常见的Web、App性能优化方案
    • React、Vue框架使用性能优化方案
前端工程化
  • 部署
  • Git
  • Vite
  • WebPack
第三方拓展
时间线
关于
GitHub
author-avatar

晨曦

82

文章

61

标签

首页
前端开发
  • CSS
  • FrontEnd
  • GraphQL
  • JS基础语法
  • JavaScript
  • TypeScript
  • Vue
  • Webpack
  • 数据结构与算法
  • 浏览器相关
  • 推荐文档
JS指南
  • JS基础相关
  • ECMAScript 6
  • OOP面向对象编程
  • JavaScript设计模式
前端框架
  • Vue相关

    • Vue基础相关
    • Vue官方生态
    • Vue.js的设计核心
性能优化
  • 前端缓存

    • HTTP缓存
    • 数据缓存
    • 离线缓存
    • CDN缓存
  • 优化方案

    • SEO方向的优化方案
    • Webpack的性能优化
    • Canvas性能优化方案
    • 了解常见的Web、App性能优化方案
    • React、Vue框架使用性能优化方案
前端工程化
  • 部署
  • Git
  • Vite
  • WebPack
第三方拓展
时间线
关于
GitHub

「译」 VueDose Tip 1 - 提高 Vue 中大型列表的性能

vuePress-theme-reco 晨曦    2021 - 2022

「译」 VueDose Tip 1 - 提高 Vue 中大型列表的性能

晨曦 2020-01-01 Vue 2VueDose性能优化文章翻译

通常,我们需要获取对象列表,例如 user 列表,item 列表,articles 列表等等。

有时,我们甚至不需要修改它们,仅显示它们或者将它们保存在全局 state 中(例如 Vuex)。一段用于获取该列表的简单代码如下所示:

export default {
  data: () => ({
    users: {}
  }),
  async created() {
    const users = await axios.get("/api/users");
    this.users = users;
  }
};
1
2
3
4
5
6
7
8
9

默认情况下,Vue 会使数组中的每个对象的每第一级的属性变为响应式。

对于大型对象而言,这可能会很昂贵。是的,有时候这些列表使分页的,但是你可能只在前端列出了其他列表。

Google Maps 的 markers 通常就是这种情况,实际上它们是很庞大的对象。

因此,在这些情况下,如果我们阻止 Vue 让这些列表变为响应式,那么我们就可以获得一些性能。我们可以让列表在添加到组件之前使用 Object.freeze 来做到这一点:

export default {
  data: () => ({
    users: {}
  }),
  async created() {
    const users = await axios.get("/api/users");
    this.users = Object.freeze(users);
  }
};
1
2
3
4
5
6
7
8
9

请记住,这同样适用于 Vuex:

const mutations = {
  setUsers(state, users) {
    state.users = Object.freeze(users);
  }
};
1
2
3
4
5

顺便说一句,如果你需要修改这个数组,你仍然可以通过创建一个新的数组来做到。例如,为了添加一项,你可以通过以下方式进行操作:

state.users = Object.freeze([...state.users, user]);
1

你是否想知道性能提升了多少? 我们将在下一个技巧中看到它,请继续关注!

# 原文链接

编辑