记一次Vite打包优化

简介: 一次Vite打包优化

aff2a2aa27f3b25dc4450e3371336e2.png

前言

近期为了上线 Module Federation ,发现项目 Vue-cli 版本太低用不了,就顺便把应用用 Vite 重新配置了下,发现打包后页面加载速度不理想,故开启一段优化之旅

目标和指标

既然要优化,那就必须有目标,能量化

目标

本次优化目标

  • 正常网速下,2s内加载完成

指标

关于指标,这里简单介绍下常见的优化指标

  • FCP(First Contentful Paint):白屏时间(第一个文本绘制时间)
  • Speed Index:首屏时间
  • TTI(Time To Interactive): 第一次可交互的时
  • lighthouse score:Chrome浏览器审查工具性能评分

开始性能分析

我们大部分的性能分析都可以借助 Chrome 完成,大致可以分为

  • Network 分析
  • Lighthouse 分析
  • Bundle 分析

Network 分析

14d568d91285c4f44dbf69769e98015.png

从网络加载状态看可以发祥有一个 1.9MB 的 index.js 文件占用了比较大的加载时间,阻塞了其它资源的加载,是一个优化点

Lighthouse 分析

使用

9a9ebdf5d56c3c96d6c61b80fe9a18a.png

结果

e2c86d966b13eb3ae7e91e9356f6cfe.png

前面我们罗列的一些指标都可以在这里直观的看到数值,记录下来为我们调优后进行参考指标对比

Bundle 分析

因为使用的是 vite,借助插件 rollup-plugin-visualizer,来进行 bundle 分析

安装

pnpm i rollup-plugin-visualizer -D
复制代码

引入

import { visualizer } from 'rollup-plugin-visualizer'
const plugins = [vue(), visualizer()]
复制代码

打包之后会在项目根目录生成 stats.html 文件,打开

48f8c4805ed582dbfc164c0b2f02422.png

分析可以看出之前 index.js 加载慢很大一部分原因是因为加载了 echarts 包,这就给我门优化提供了方向

开始优化

通过之前的分析,主要的加载优化方向还是大体积文件瘦身(之前已经做过 gzip 的优化,如果没做过的同学强烈推荐,可以极大提升加载速度)

GZIP 配置

这里顺便介绍下 vite 的 GZIP 配置

安装 vite-plugin-compression

npm i vite-plugin-compression -D
复制代码

修改 vite.config.js 配置

import viteCompression from 'vite-plugin-compression'
 plugins: [vue(), viteCompression()]
复制代码

打包后就会生成 gzip 文件了,但是服务端 nginx 还需要配置一下才能生效

http {
    gzip_static on;
    gzip_proxied any;
}
复制代码

具体也可以看看我的这篇文章,有详细介绍

系统介绍浏览器缓存机制及前端优化方案

echarts 单独拆分

修改 vite.config.js 配置

build: {
    rollupOptions: {
        output: {
            manualChunks: {
                echarts: ['echarts']
            }
        }
    }
}
复制代码

打包后 Index.js 体积变化(未压缩前)

Before: 4.49MB

After: 1.34MB

图片压缩

安装 vite-plugin-imagemin

npm i vite-plugin-imagemin -D
复制代码

修改 vite.config.js 配置

import viteImagemin from "vite-plugin-imagemin"
plugins: [vue(), viteImagemin()]
复制代码

打包后会生成压缩的图片,但是每次打包都会重新压缩一遍,比较浪费时间,如果不介意的话采用此方案也很简单,网上查了一下有使用本地压缩的方案,不过配置比较繁琐,就自己写了个插件,后续会有文章单独介绍,敬请关注

结果分析

Network 分析

cef8a0be9647eb56cf981390ac91a2d.png

加载时间 平均节省 1

Lighthouse 分析

62264062c6412892fa319fe95f08904.png

分数由 46 提升到 52

Bundle 分析

28262f05ff2c6e35588694d4b2fe2ae.png

主包体积缩小 1 M 左右

总结

到此本次优化告一段路,基本达到预期效果,不过遗留了一些问题,像引用 video 插件相关的一些页面想用开头提到的组件联邦 Module Federation来做,但是加载时部分手机浏览器出现兼容问题未能完成,后续等解决了兼容问题在单独写一篇总结 ^-^

相关文章
|
前端开发 JavaScript 开发者
Vite前端构建工具详解
Vite 是一款新兴的前端构建工具,它的出现带来了前端开发体验的革命性变化。本文将介绍 Vite 的基本概念和核心特性,并通过代码实例来演示其强大功能。
190 0
|
4月前
|
JSON 前端开发 算法
vite打包优化vite-plugin-compression的使用
【8月更文挑战第4天】vite打包优化vite-plugin-compression的使用
550 4
|
4月前
|
JavaScript 前端开发
什么是前端构建工具?vite和vite脚手架的关系!
【8月更文挑战第1天】前端构建工具简析
89 4
|
5月前
|
JavaScript
Vite 项目中如何去集成 Sass
Vite 项目中如何去集成 Sass
71 0
|
5月前
|
JavaScript 前端开发
前端 JS 经典:Vite 打包优化
前端 JS 经典:Vite 打包优化
263 0
|
7月前
|
缓存 前端开发 JavaScript
Vite 打包优化:全面解析与实践
Vite 作为新一代前端构建工具,以其快速开发体验和高效打包能力著称。然而,在实际项目开发中,为了进一步提升性能和用户体验,我们仍需对 Vite 打包进行优化。本文将深入探讨 Vite 打包优化策略,涵盖代码拆分、资源压缩、缓存利用、构建配置等多个方面,并提供实践案例和最佳实践建议,帮助开发者充分释放 Vite 的潜力。
1780 1
|
JavaScript
为老的vueCli项目添加vite支持
为老的vueCli项目添加vite支持
145 0
为老的vueCli项目添加vite支持
|
资源调度 JavaScript 前端开发
nuxt2-storybook-vite:环境搭建、基础使用 / nuxt项目组件库
nuxt2-storybook-vite:环境搭建、基础使用 / nuxt项目组件库
343 0
|
缓存 JavaScript CDN
关于vite打包优化,你了解多少
关于vite打包优化,你了解多少
|
前端开发
关于我写了一个vite插件那些事
在我们开发的过程中有开发模式和生产模式,那有些测试代码会在开发模式的时候使用,在生产环境要删掉,一般是手动删除,另一种就是判断环境变量,但是环境变量不好处理template代码以及css代码,为此我写了一个插件将解决以上问题。
221 0
关于我写了一个vite插件那些事