手把手教你优化 Vue.js 中的渲染性能

阅读时长 5 分钟读完

Vue.js 是前端类框架中的佼佼者,然而在不断增长的代码库下,Vue 应用的性能优化已成至关重要的一部分。本文将从渲染性能入手,探讨 Vue.js 应用的优化方法。

1. 缩小数据访问的范围

对象的访问运算符(.)和数组的索引运算符([])在 JavaScript 中是十分昂贵的操作。在 Vue.js 中,对于每一个被观察的属性,一个变化侦测器将被创建。形如 this.foo.bar.baz 的深层次访问将会导致一系列侦测器的运行,每个侦测器都会进行相同的数据访问,从而严重影响性能。

如果需要对数据操作,可以在 methods 中引用数据,方法中通过递归的方式减小访问范围,将结果缓存至本地变量。以下代码示例展示了如何通过变量将数据绑定至子组件的语法:

-- -------------------- ---- -------
----------
  ------ ---------------------- --
-----------

--------
------ ------- -
  ------ -
    ------ -
      ------ --
    -
  --
  --------- -
    --------------- -
      ------ ---------------------- -- --------------
    -
  -
-
---------

通过缓存数组中的 filteredItems 可以避免对每个元素进行侦测。这样,在数据变化时,只需要更新已经被依赖的部分。

2. 避免不必要的计算

Vue.js 的计算属性是被设计用于处理更复杂的逻辑。在组件中,计算属性可返回一个计算过的值,然而它们不应该用于复杂的耗时计算。

计算属性和侦听器都依赖于数据变化自动创建侦测器。无论何时修改组件的状态时,计算属性都会重新计算,而如果数据没有改变,就不需要再次进行计算。这样做,Vue.js 可以精确地知道何时更新组件的视图。

以下代码示例展示了如何为计算属性添加缓存:

-- -------------------- ---- -------
----------
  ------- --------------- --------
-----------

--------
------ ------- -
  ------ -
    ------ -
      -------- ------- -------
    -
  --
  --------- -
    ----------------- -
      -- --------------- -
        ------ --
      -
      ------ --------------------------
    -
  -
-
---------

查询字符串的解析是另一个常用的价格昂贵的操作。在Vue.js中, 可以通过 watch 方法,侦测某个特定变量的变化然后在相应的函数中得到调用。

3. 利用 v-if 而非 v-show 避免无必要渲染

在 Vue.js 中,当条件渲染一个组件时,应该优先考虑使用 v-if,而非 v-showv-show 只是通过改变 display CSS 属性来显示或隐藏元素。在相同的元素使用 v-show 多次,相当于在所有情况下都要进行 DOM 渲染。

当切换条件时,v-if 会确实地销毁或创建元素,这种方式比 v-show 更加高效。而且,在条件切换的开销较大时,使用 v-if 可以提高性能。

以下代码展示了使用 v-if 的例子:

-- -------------------- ---- -------
----------
  -----
    ------- --------------------- --- ---- --------- - ------ - ------ ---- ------ -----------
    -- ----------------------- ----------
  ------
-----------

--------
------ ------- -
  ------ -
    ------ -
      ---------- ----
    -
  --
  -------- -
    ----------- -
      -------------- - ---------------
    -
  -
-
---------

4. 合并组件以减少更新开销

在 Vue.js 中,显示一个组件是有成本的,特别是在初始阶段。使用更多的组件可能会显著影响应用程序的启动时间。然而,拆分组件往往会使其更具有可维护性和可读性。因此,在合适的时候,合并组件可以帮助避免更新过多的开销。

以下代码示例展示了一个合并按钮和气泡注释的 HTML:

-- -------------------- ---- -------
----------
  -----
    ------- ---------------------------- ---------------
    ---- ------------------ ----------------
      ------- -- - -----------
    ------
  ------
-----------

--------
------ ------- -
  ------ -
    ------ -
      ------------ -----
    -
  --
  -------- -
    -------------- -
      ---------------- - -----------------
    -
  -
-
---------

5. 利用 v-once 缓存静态内容

在任何 Vue.js 应用程序中,静态渲染内容应该使用 v-once 呈现。这个指令使得 DOM 元素可以被缓存只渲染一次。在静态内容下处理 VNode 的开销可以被移除。因此,尽可能公开静态标记成为最大尝试的方式。

以下代码展示了使用 v-once 的例子:

-- -------------------- ---- -------
----------
  -----
    --- --------- ----- -------
    ----- ------- ------
  ------
-----------

--------
------ ------- -
  ------ -
    ------ -
      ------ --- -----
      -------- ------- -------
    -
  -
-
---------

结论

在前端开发中,性能优化已经成为一个必要的部分。在本文中我们探讨了一些优化 Vue.js 渲染性能的方法。在你的项目中遵循这些方法,你的应用程序将更快、更流畅,效率也会更高。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f4dfdac5c563ced5662722

纠错
反馈