前端性能优化(vite)

vite相对于webpack使用rollup构建,更快

分包策略

默认情况下,浏览器重复请求相同名称的静态资源时,会直接使用缓存的资源。我们可以将不经常更新的代码单独打包成一个js文件,减少http请求,降低服务器压力。

// vite.config.js
import { defineConfig } from 'vite'

export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks: id {
          // 将 node_modules 中的代码单独打包成一个 JS 文件
          if(id.includes('node_modules')) {
            return 'vendor'
          }
        }
      }
    }
  }
})

gzip压缩

gzip 是一种使用非常普遍的压缩格式。使用 gzip 压缩可以大幅减小代码体积,提升网络性能。开启 gzip 也比较简单,使用一个插件就可以了

npm i vite-plugin-compression

// vite.config.js
import { defineConfig } from 'vite'
import viteCompression from 'vite-plugin-compression'

export default defineConfig({
  plugins: [viteCompression()]
})

完整逻辑是,我们需要把浏览器支持的压缩类型传给服务端,在请求头中设置 accept-encoding: gzip, deflate, br,只不过这一步浏览器通常帮我们都做了。然后服务端根据浏览器支持的类型,设置响应头 content-encoding: gzip ,告诉浏览器以何种方式进行解压。

注意:因为浏览器解压也需要时间,所以代码体积不是很大的话不建议使用 gzip 压缩。

cdn加速

内容分发网络(Content Delivery Network,简称 CDN)就是让用户从最近的服务器请求资源,提升网络请求的响应速度。通常我们请求依赖模块使用 CDN ,而请求项目代码依然使用自己的服务器。

使用 CDN 也比较简单,一个插件就可以搞定:

npm i vite-plugin-cdn-import -D

// vite.config.js
import { defineConfig } from 'vite'
import viteCDNPlugin from 'vite-plugin-cdn-import'

export default defineConfig({
  plugins: [
    viteCDNPlugin({
      // 需要 CDN 加速的模块
      modules: [
        {
          name: 'lodash',
          var: '_',
          path: `https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js`
        }
      ]
    })
  ]
})

图片压缩

根据项目对清晰度的要求,我们可以使用 vite-plugin-imagemin 插件,对图片进行适当压缩:

npm i vite-plugin-imagemin -D

// vite.config.js
import { defineConfig } from 'vite'
import viteImagemin from 'vite-plugin-imagemin'

export default defineConfig({
  plugins: [
    viteImagemin({
      gifsicle: {
        optimizationLevel: 7,
        interlaced: false
      },
      optipng: {
        optimizationLevel: 7
      },
      mozjpeg: {
        quality: 20
      },
      pngquant: {
        quality: [0.8, 0.9],
        speed: 4
      },
      svgo: {
        plugins: [
          {
            name: 'removeViewBox'
          },
          {
            name: 'removeEmptyAttrs',
            active: false
          }
        ]
      }
    })
  ]
})

不同格式的文件配置也不一样,具体可以参考 github :vite-plugin-imagemin 。

### Vue3 和 Vite 应用性能优化技巧 #### 1. 编译时优化策略 对于基于 Vite 的构建工具而言,尽管其提供了快速冷启动和即时热更新等功能,但这并不意味着无需关注其他方面的优化。为了实现更优的编译效果,应考虑采用按需加载的方式引入资源文件,减少不必要的模块打包进入初始页面中;同时利用 Tree Shaking 技术移除未使用的代码片段,从而减小程序体积并加快下载速度[^1]。 ```javascript // vite.config.js 配置示例 import { defineConfig } from 'vite'; export default defineConfig({ build: { rollupOptions: { output: { manualChunks(id) { if (id.includes('node_modules')) { return id.toString().split('node_modules/')[1].split('/')[0]; } }, }, }, }, }); ``` #### 2. 运行时内存管理 在运行期间保持良好的内存占用状态同样重要。可以通过懒加载组件来降低初次渲染所需的时间成本以及减轻浏览器的压力;另外,在处理大型列表或表格数据展示时,推荐使用虚拟滚动技术只渲染可见区域内的DOM节点,以此提高交互流畅度[^4]。 ```html <!-- 懒加载组件 --> <template> <Suspense> <template #default> <MyComponent /> </template> <template #fallback> Loading... </template> </Suspense> </template> <script setup lang="ts"> const MyComponent = defineAsyncComponent(() => import('./components/MyComponent.vue')); </script> ``` #### 3. 微前端架构设计 当面对复杂的企业级应用场景时,采取微前端模式能够有效解决单体应用臃肿的问题。通过划分独立业务单元各自负责特定功能模块,并允许它们单独部署上线而不影响整体系统的稳定性。这不仅有助于团队协作分工更加清晰高效,也能显著提升用户体验质量。 #### 4. 利用现代浏览器特性 充分利用现代浏览器所提供的新特性和API接口也是不容忽视的一环。例如Service Worker缓存机制可以在离线状态下依然保证网页正常访问;而Intersection Observer则可用于监测元素可视情况进而触发相应的逻辑操作,如图片延迟加载等[^2]。 ```javascript if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/sw.js').then(registration => { console.log('SW registered:', registration); }).catch(error => { console.error('SW registration failed:', error); }); }); } ``` #### 5. 定期评估与调整 最后但并非最不重要的一步就是定期运用诸如Google Lighthouse这样的第三方评测工具对自己的网站进行全面体检,获取关于性能表现的具体分数评级及改进建议。根据这些反馈信息不断迭代完善现有措施直至达成预期目标为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值