searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Vue template 优化大量v-if的方案

2023-07-19 08:43:01
217
0

一、使用大量的 v-if 会产生的弊端

1、使内存增加: 每个 v-if 条件都会生成对应的DOM元素,并在切换条件时进行创建和销毁,当模板中存在大量的 v-if 时,会导致内存占用增加,对性能和资源消耗产生影响。

2、使页面渲染性能下降: 每个 v-if 都需要遍历并计算这些条件,尤其是当条件选择复杂且计算开销较大时,会导致初始渲染的耗时增加,从而延长页面的加载时间。v-if 用的非常多容易导致页面卡顿甚至崩溃。

2、会增加冗余代码:代码可读性降低,难以理解和调试。

3、可维护下降:当模板中存在大量的 v-if 时,由于每个条件判断都是独立的,修改其中一个条件可能需要修改多个地方,很有可能出错,维护也比较麻烦。如果项目经手人数较多,历经时间较长,很可能由于 v-if 的混乱造成不同的业务场景相互杂糅的后果。

 


二、提供解决方案
 
1、合并条件
如果有多个条件判断且它们是相互独立的,可以将它们合并为一个更复杂的条件表达式。这样可以减少模板中 v-if 的数量,减少渲染的耗时,提高模板的可读性和性能。但记得要标明注释,使项目可维护。
 
2、利用计算属性computed
对于复杂的条件逻辑,可以通过计算属性的返回值来控制渲染的内容, 这样使得模板代码更简洁,条件处理的逻辑更清晰且更易维护。
示例:
 
3、使用 v-show
对于需要频繁切换条件的场景,用 v-show 代替 v-if,可以避免频繁的销毁和重建元素。但是需要注意,v-show只能作用于元素上,不能与template标签一起使用。且v-show不能与v-else / v-else-if 配合使用。
 
4、使用过滤器filter
可以自定义过滤器,这个过滤器可以设置在当前页面,如果想要公共使用,也可以自定义全局(Vue.filter())。
示例:
 
5、使用异步动态组件
使用 <component :is="currentComponent"> 根据条件动态切换组件。注册所有的component组件,根据传入的条件得知具体是哪个component,并用 :is 进行渲染。
 
6、使用子组件
将含有很多条件逻辑的代码移到子组件中,在父组件引用子组件。这样做可以降低父组件的复杂性,如果需要功能上的迭代或业务场景的变动,只需要在子组件中修改即可。
 
7、使用JSX/TSX
示例:
 
 
 
 
 
0条评论
作者已关闭评论
s****n
2文章数
0粉丝数
s****n
2 文章 | 0 粉丝
s****n
2文章数
0粉丝数
s****n
2 文章 | 0 粉丝
原创

Vue template 优化大量v-if的方案

2023-07-19 08:43:01
217
0

一、使用大量的 v-if 会产生的弊端

1、使内存增加: 每个 v-if 条件都会生成对应的DOM元素,并在切换条件时进行创建和销毁,当模板中存在大量的 v-if 时,会导致内存占用增加,对性能和资源消耗产生影响。

2、使页面渲染性能下降: 每个 v-if 都需要遍历并计算这些条件,尤其是当条件选择复杂且计算开销较大时,会导致初始渲染的耗时增加,从而延长页面的加载时间。v-if 用的非常多容易导致页面卡顿甚至崩溃。

2、会增加冗余代码:代码可读性降低,难以理解和调试。

3、可维护下降:当模板中存在大量的 v-if 时,由于每个条件判断都是独立的,修改其中一个条件可能需要修改多个地方,很有可能出错,维护也比较麻烦。如果项目经手人数较多,历经时间较长,很可能由于 v-if 的混乱造成不同的业务场景相互杂糅的后果。

 


二、提供解决方案
 
1、合并条件
如果有多个条件判断且它们是相互独立的,可以将它们合并为一个更复杂的条件表达式。这样可以减少模板中 v-if 的数量,减少渲染的耗时,提高模板的可读性和性能。但记得要标明注释,使项目可维护。
 
2、利用计算属性computed
对于复杂的条件逻辑,可以通过计算属性的返回值来控制渲染的内容, 这样使得模板代码更简洁,条件处理的逻辑更清晰且更易维护。
示例:
 
3、使用 v-show
对于需要频繁切换条件的场景,用 v-show 代替 v-if,可以避免频繁的销毁和重建元素。但是需要注意,v-show只能作用于元素上,不能与template标签一起使用。且v-show不能与v-else / v-else-if 配合使用。
 
4、使用过滤器filter
可以自定义过滤器,这个过滤器可以设置在当前页面,如果想要公共使用,也可以自定义全局(Vue.filter())。
示例:
 
5、使用异步动态组件
使用 <component :is="currentComponent"> 根据条件动态切换组件。注册所有的component组件,根据传入的条件得知具体是哪个component,并用 :is 进行渲染。
 
6、使用子组件
将含有很多条件逻辑的代码移到子组件中,在父组件引用子组件。这样做可以降低父组件的复杂性,如果需要功能上的迭代或业务场景的变动,只需要在子组件中修改即可。
 
7、使用JSX/TSX
示例:
 
 
 
 
 
文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
1
0