Vue.js 中列表渲染的优化技巧

阅读时长 7 分钟读完

Vue.js 是一款优秀的 JavaScript MVVM 框架, 传入一个数据源,Vue.js 可以自动进行相应的视图更新,Vue.js 支持通过 v-for 指令来处理列表渲染,但是在大规模数据列表渲染的情况下,会遇到一些性能问题。本文将介绍一些 Vue.js 中列表渲染的优化技巧,以提高Vue.js前端应用程序的性能。

1. 使用 v-for 的时候添加 key

在 Vue.js 的列表渲染中,v-for 指令不仅可以用来循环渲染数组,还可以用来循环渲染对象的属性。使用 v-for 指令的时候,Vue.js 会根据每个数据项的 key 属性来辨别不同的列表项,如果没有设置 key 值,Vue.js 会默认使用索引值作为 key ,这样会导致重新渲染时可能会出现一些性能问题。

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

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

在上述代码中,我们给每个列表项设置了唯一的 key 值,这样 Vue.js 就可以更快地辨别出数据项的变化,提高了重新渲染的性能。

2. 使用 v-if 对列表进行分组

如果需要对大规模数据进行列表渲染时,我们可以考虑采用分段渲染的方式,也就是把一整个列表按照某个条件拆分成多个子列表,在每个子列表上标上 v-if 条件,以优化渲染性能。

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

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

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

在上述代码中,我们把一个大的数据列表按照条件分组,每个子列表上都有 v-if 条件判断,只有当该组有变化,才会进行重新渲染。

3. 使用 v-forkey 设置缓存策略

Vue.js 同时支持动态组件的渲染,在维护动态组件时,Vue.js 会自动保存组件的状态,并缓存组件的 DOM,当组件重复使用时,会从 DOM 缓存中恢复组件,避免了重复渲染。

对于列表渲染,同样可以利用 v-forkey 属性设置缓存策略,Vue.js 会通过对比 key 值来提高列表渲染的效率。

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

在上述代码中,我们使用了 <template> 标签来包裹列表项,这样可以不添加多余的父节点,同时使用 :key 属性设置了缓存策略。

4. 避免直接操作子组件的 props

在 Vue.js 中,父组件通过 props 传递数据给子组件,如果直接在子组件中修改 props ,会导致子组件的状态和父组件状态不一致,进而造成一些性能问题。

对于列表渲染,也同样需要注意这一点,我们可以将需要修改 props 的逻辑抽离出来,封装成组件内部的方法,然后调用该方法来修改数据。

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

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

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

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

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

在上述代码中,我们将需要修改 props 的逻辑封装成了组件内部的方法 handleClick() , 当需要再次触发数据变更时,我们通过 $emit 方法来通知父组件,进而修改数据。

总结

以上就是 Vue.js 中列表渲染的一些优化技巧,这些技巧在大规模数据列表渲染的情况下非常实用。在实际开发中,我们可以根据具体情况采用上述技巧,进而提高 Vue.js 前端应用程序的性能。

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

纠错
反馈