20. Vue的性能优化有哪些

397 阅读3分钟

路由懒加载

我们知道 Vue 是单页应用,所以如果没有用懒加载,就会导致进入首页时需要加载的内容过多,时间过长,就会出现长时间的白屏,很不利于用户体验,SEO 也不友好

所以可以去用懒加载将页面进行划分,需要的时候才加载对应的页面,以分担首页的加载压力,减少首页加载时间

{
path: '/home',
component: () => import('@/components/Home') }

v-for

在v-for遍历的同时使用key,key是唯一的字符串或者数字,尽量不要使用index。 v-for遍历的时候不要不要使用v-if

图片懒加载

图片懒加载就是对于有很多图片的页面,为了提高页面加载速度,只加载可视区域内的图片,可视区域外的等到滚动到可视区域后再去加载 可以使用vue-lazyload 或者自己封装自定义指令,详情见指令章节

组件库或者其他库按需加载

ui组件库可以在组件使用时按需加载具体的标签。 比如lodash库在使用时可以按需加载具体的一个方法

keepalive缓存

比如在表单输入页面进入下一步后,再返回上一步到表单页时要保留表单输入的内容、比如在列表页>详情页>列表页,这样来回跳转的场景等

我们都可以通过内置组件 <keep-alive></keep-alive> 来把组件缓存起来,在组件切换的时候不进行卸载,这样当再次返回的时候,就能从缓存中快速渲染,而不是重新渲染,以节省性能

避免所有数据都是响应式数据

有些数据固定时,就不做响应式处理, vue2.Object.freeze() 冻结一个对象 vue3 不用ref或者reactive包裹

事件销毁

ue 组件销毁时,会自动解绑它的全部指令及事件监听器,但是仅限于组件本身的事件

而对于定时器addEventListener 注册的监听器等,就需要在组件销毁的生命周期钩子中手动销毁或解绑,以避免内存泄露

函数时组件

对于一些纯展示,没有响应式数据,没有状态管理,也不用生命周期钩子函数的组件,我们就可以设置成函数式组件,提高渲染性能,因为会把它当成一个函数来处理,所以开销很低

原理是在 patch 过程中对于函数式组件的 render 生成的虚拟 DOM,不会有递归子组件初始化的过程,所以渲染开销会低很多

公共代码提取

对于公共的函数,或者数据可以提取到外部的js文件,在需要的地方的引用,提高了可维护性,和代码的可读性。 vue还可以使用mixin

computed缓存利用

计算属性是由缓存的,可以利用计算缓存的属性,当依赖不变时,就不会重新计算结果值。

合理利用v-if,v-for

v-if渲染只会渲染1-2次的dom。不要添加到回多次渲染的目标,然会重复的移除添加dom浪费新能, 多次渲染的使用v-show 只用改变css属性就行

cdn注入

webpack 里有个 externals,可以忽略不需要打包的库,

externals: {
'vue': 'Vue',
'vue-router': 'VueRouter',
'vuex': 'Vuex',
'axios': 'axios'
}

script标签引入

【来源:www.xyhtml5.com/22868.html,…