前端项目性能优化:使用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

相关文章
|
缓存 前端开发 JavaScript
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
|
8月前
|
前端开发 JavaScript 安全
|
前端开发
如何制定适合前端工程化的分支策略?
如何制定适合前端工程化的分支策略?
246 61
|
前端开发 测试技术
前端工程化的分支策略要如何与项目的具体情况相结合?
前端工程化的分支策略要紧密结合项目的实际情况,以实现高效的开发、稳定的版本控制和顺利的发布流程。
271 58
|
前端开发
结合具体案例分析Gitflow分支策略在大型前端项目中的应用优势
通过这个具体案例可以看出,Gitflow 分支策略在大型前端项目中能够提供有条不紊的开发环境,保障项目的稳定性和持续发展。
213 56
|
前端开发 项目管理
Gitflow分支策略及其在前端工程化中的应用
Gitflow 分支策略也并非适用于所有项目。对于一些小型或简单的前端项目,可能会显得过于复杂。在实际应用中,需要根据项目的具体情况和团队的需求进行适当调整和优化。
246 55
|
前端开发 安全 UED
2024年前端性能优化新策略
2024年前端性能优化策略涵盖代码分割与环境变量管理。代码分割通过动态导入和按需加载CSS减少初始加载时间;环境变量管理则确保敏感信息安全,简化多环境配置。结合最新工具和技术,可大幅提升Web应用性能与用户体验。
|
缓存 监控 前端开发
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
|
JavaScript 前端开发 安全
2024年前端开发新趋势:TypeScript、Deno与性能优化
2024年前端开发迎来新趋势:TypeScript 5.0引入装饰器正式支持、const类型参数及枚举改进;Deno 1.42版推出JSR包注册表、增强Node.js兼容性并优化性能;性能优化策略涵盖代码分割、懒加载及现代构建工具的应用。这些变化推动前端开发向更高效率和安全性发展。
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
456 5

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    574
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    234
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    225
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    163
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    274
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    407
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    176
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    112
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    190
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    260