前端项目性能优化:使用vite的分包策略

简介: 【8月更文挑战第4天】Vite性能优化-分包策略

为什么需要分包策略?

浏览器的缓存策略

浏览器在请求静态资源时,只要静态资源的名称不变,它就不会重新请求 xxx.js资源。
使用Vite打包后的js文件是带有哈希值的,只要我们的代码内容有一点点变化,那么文件的hash值都会变化。

我们初始化一个项目,安装vite进行演示

npm init -y
npm i vite -D
// main.js中写一点逻辑
const mainArr = []

打包
image.png
更改main.js中的逻辑然后重新打包

// 更改main.js中的逻辑
let mainArr = []

image.png
可见,项目中任何业务代码更改后,文件的hash值都会改变,重新部署代码后,浏览器都会重新请求资源文件。
基于这种策略,服务器往往存在不必要的性能浪费。

浏览器缓存策略的不足

假设我们的项目修改了一点点业务逻辑,每次 打包发布后,由于打包的文件名发生了改变,浏览器都会重新请求这个js文件。
看个示例:
我们引入lodash,然后main.js中写入一点逻辑。

import {
   
    forEach } from "lodash"
const mainArr = []
forEach(mainArr,(ele) => {
   
   
  console.log('ele: ', ele);
})

打包
image.png
main.js中修改了一点点内容,重新打包
image.png

注:为了展示源码,这里关闭了打包时的代码压缩。vite.config.js中配置build:{minify:false}

通过这个示例我们可以发现个问题,我们引入了lodash,虽然它的内容始终没有变(大概有5481行的代码),但是随着业务代码的一点点修改,它都会和业务代码打包在一起,被浏览器重新请求。
这是浪费性能的,lodash完全没有必要被重新请求。如果我们将lodash和业务代码打包成两个独立的js文件,就可以完美解决这个问题。这就是分包策略。
分包策略就是把一些不会经常更新的文件,进行单独打包处理。

分包策略的实现

vite中实现分包策略,实际是靠配置rollup的打包配置完成的。

// vite.config.js
import {
   
    defineConfig } from "vite";
export default defineConfig({
   
   
  build:{
   
   
    // 在这里配置打包时的rollup配置
    rollupOptions:{
   
   

    }
  }
});

rollup的output.manualChunks这一配置可以实现分包策略,具体内容可以查看官网:
选项大列表 | rollup.js 中文文档 | rollup.js中文网

output.manualChunks
官方注解:
当该选项值为函数形式时,每个被解析的模块都会经过该函数处理。如果函数返回字符串,那么该模块及其所有依赖将被添加到以返回字符串命名的自定义 chunk 中。例如,以下例子会创建一个命名为 vendor 的 chunk,它包含所有在 node_modules 中的依赖。

manualChunks(id) {
   
   
  if (id.includes('node_modules')) {
   
   
    return 'vendor';
  }
}

我们打印一下manualChunks函数的参数

import {
   
    defineConfig } from "vite";
export default defineConfig({
   
   
  build:{
   
   
    minify:false,
    // 在这里配置打包时的rollup配置
    rollupOptions:{
   
   
      manualChunks:(id) => {
   
   
        console.log("id-------------",id);
      }
    }
  }
});

image.png
可以看出,id对应的就是所有需要打包整合的文件,如果id包含node_modules,一定不是我们的业务代码,根据官方释义,我们可以将包含node_modules的文件打包在一起

import {
   
    defineConfig } from "vite";
export default defineConfig({
   
   
  build:{
   
   
    minify:false,
    // 在这里配置打包时的rollup配置
    rollupOptions:{
   
   
      manualChunks:(id) => {
   
   
        if (id.includes('node_modules')) {
   
   
          return 'vendor';
        }
      }
    }
  }
});

重新打包后,可以发现分包策略已经实现了。
image.png

相关文章
|
1月前
|
缓存 边缘计算 监控
2024年前端性能优化的新策略
【10月更文挑战第3天】本文分享了一些2024年前端性能优化的新策略,希望能够为前端开发者提供实用的参考和指导。在实际开发中,应根据应用的具体需求和场景选择合适的优化方法。
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化:提升用户体验的关键策略
【10月更文挑战第4天】前端性能优化:提升用户体验的关键策略
50 1
|
1月前
|
前端开发 JavaScript 开发者
前端开发中的组件化设计与性能优化
【10月更文挑战第7天】前端开发中的组件化设计与性能优化
39 0
|
14天前
|
缓存 前端开发 JavaScript
前端性能优化:Webpack与Babel的进阶配置与优化策略
【10月更文挑战第28天】在现代Web开发中,Webpack和Babel是不可或缺的工具,分别负责模块打包和ES6+代码转换。本文探讨了它们的进阶配置与优化策略,包括Webpack的代码压缩、缓存优化和代码分割,以及Babel的按需引入polyfill和目标浏览器设置。通过这些优化,可以显著提升应用的加载速度和运行效率,从而改善用户体验。
35 6
|
17天前
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
17天前
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略
|
20天前
|
前端开发 JavaScript 开发工具
Vite 4.0 发布,下一代的前端工具链
【10月更文挑战第21天】Vite 4.0 的发布标志着前端开发领域的又一次重要进步。它为开发者带来了更高效、更智能、更具创新性的开发体验,正逐渐成为下一代前端工具链的引领者。
|
22天前
|
JavaScript 前端开发 算法
前端优化之超大数组更新:深入分析Vue/React/Svelte的更新渲染策略
本文对比了 Vue、React 和 Svelte 在数组渲染方面的实现方式和优缺点,探讨了它们与直接操作 DOM 的差异及 Web Components 的实现方式。Vue 通过响应式系统自动管理数据变化,React 利用虚拟 DOM 和 `diffing` 算法优化更新,Svelte 通过编译时优化提升性能。文章还介绍了数组更新的优化策略,如使用 `key`、分片渲染、虚拟滚动等,帮助开发者在处理大型数组时提升性能。总结指出,选择合适的框架应根据项目复杂度和性能需求来决定。
|
1月前
|
前端开发 JavaScript
Vite 多种前端框架的构建
Vite 多种前端框架的构建
|
1月前
|
缓存 前端开发 JavaScript
前端性能优化策略
【10月更文挑战第9天】前端性能优化策略
23 6