vue性能优化方案

1. v-show与v-if的优化

1. 尽可能的用v-show替代v-if

因为 v-show 本质上是通过 css 控制元素的显示与隐藏,而 v-if 是通过操作 dom 来控制元素的显示与隐藏,频繁操作 dom 会导致性能有所影响

2. 使用 v-for 必须添加 key
在删除数据时,由于没有绑定 key,不确定删除的是哪个,就会把整个虚拟 dom 重新渲染,这样对性能不太友好。但如果设置了 key,比如 k 的值为 x,那么在删除数据时候只会把 dom 为 x 的数据删掉,并不会重新渲染整个 dom。这样一来对性能有很大的提高

3. 避免 v-for 与 v-if 一起使用

/* 当 v-for 和 v-if 结合使用时,如果将 v-if 放在父元素上时,v-for 会在每次重新渲染时都完整遍历整个列表,判断每个元素是否满足条件。这样也会导致性能下降,尤其在列表较大时更为明显。
为了避免这种性能问题,推荐的做法是将 v-if 放在包裹在元素内部,而不是包裹在元素上,这样可以减少不必要的遍历次数,提升性能。 */
<div v-for="item in data" :key="item.id">
  <div v-if="item.condition">
    <!-- 具体元素内容 -->
  </div>
</div>

2. 合理使用 watch 和 computed

watch 适用于执行异步或开销较大的操作,或者需要对数据变化作出特定响应的场景。

computed 用于根据已有的响应式数据计算出一个新的值,它会根据相关的响应式数据进行缓存,只在相关响应式数据改变时进行重新计算。这样可以避免不必要的重复计算,提高性能。

简单来说: 使用 watch 监听数据变化,适合处理复杂操作或需要特定响应的情况;使用 computed 计算属性,可以根据已有数据计算新值并自动缓存,提高性能。合理使用这两个功能可以让代码更易读和更高效。

3. 组件缓存

组件缓存是指将组件的状态缓存起来,当组件再次被渲染时,可以直接使用缓存的状态,而不需要重新渲染组件。

组件缓存的优势在于减少了组件的渲染次数,从而降低了开销。它对于包含大量静态内容的组件,如轮播图、静态文章等组件的性能优化特别有效。因为这些组件的内容往往不会随着数据变化而发生改变,使用组件缓存可以将组件的渲染次数降至最低。

4. 使用路由懒加载

1. 减轻初始加载: 通过路由懒加载,只有在使用到对应的页面时才会加载相关的代码。这样可以减少初始加载的代码量,提升网页的加载速度,特别是在应用有很多页面的情况下效果更为明显。

2. 提升页面加载速度: 当用户访问某个具体的页面时,只需要加载该页面所需的代码,而不是一次性加载所有页面的代码。这样可以减少请求的网络带宽和内存占用,提升页面加载速度,给用户更好的体验。

3. 优化资源利用: 路由懒加载可以将应用划分为多个独立的模块,每个模块可以按需加载,提高代码的复用性和可维护性。同时,由于只加载当前需要的模块,可以更好地控制资源的使用,避免一次性加载过多的资源。

{
    path: '/login',
    component: () => import('@/views/login/index'),
}

简单来说: 路由懒加载可以让网站加载更快,提高用户体验,同时也更好地利用资源、提高代码可维护性。
使用懒加载可以优化同一时间减少 http 请求开销,比如页面加载时让他先加载部分数据,等用户点击下一页或下拉之后再加载另一部分数据。

5. 引入网络资源

可以将静态资源放在第三方 CDN 服务器上,比如 css、js、图片、视频、字体等

这样做有以下好处:提高页面加载速度;减少项目打包之后的体积;利用浏览器缓存,不变动的文件长期缓存。

6. 尽可能使用按需导入

在项目中尽可能避免 * 导入全部而是使用按需导入,否则就会导入很多我们用不到的东西从而影响项目打包的体积大小以及页面加载速度。

7. icon 使用精灵图

默认情况下页面中有几张图片就会发起几次请求,所以我们可以将图片全部合成在一张图中,然后通过操作 CSS 的 background 属性,控制背景的位置以及大小,来展示需要的部分。这样可以减少 HTTP 请求压力 。

### 关于 Vue 性能优化的配置方法和最佳实践 #### 一、减少组件重新渲染次数 通过合理利用 `v-if` 和 `v-show` 来控制元素显示与否可以影响到性能,在频繁切换场景下推荐使用 `v-show` 而不是 `v-if`,因为后者会销毁并重建 DOM 元素[^1]。 #### 二、懒加载路由模块 采用按需加载的方式引入视图组件能够显著降低初次加载时间。借助 Webpack 的动态导入功能实现代码分割,使得只有当特定路径被访问时才会去请求对应的 JS 文件[^2]: ```javascript const Home = () => import(/* webpackChunkName: "home" */ './views/Home.vue'); ``` #### 三、虚拟列表技术处理大量数据展示 如果存在需要一次性呈现非常条目的情况,则应该考虑运用 Virtual List 或者 Infinite Scroll 技术来分批获取并渲染可见区域内的项,从而减轻浏览器负担[^3]. #### 四、图片资源优化 对于页面中的图像资产,可以通过压缩原文件大小以及选用合适的格式(如WebP),同时配合响应式图片方案以适应不同设备分辨率需求;另外还可以设置合理的缓存策略提高重复浏览效率。 #### 五、事件监听器管理 注意移除不再使用的事件处理器防止内存泄漏,并且尽可能地把个相同类型的监听合并成一个统一处理函数,以此减少不必要的开销。 #### 六、计算属性与侦听器的应用 善用 computed 属性代替 methods 可以让模板编译更加高效,因为它只会在依赖的数据发生变化时才重新求值。而对于复杂逻辑则更适合放在 watch 中异步执行,避免阻塞主线程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值