当前位置:首页 > 技术分析 > 正文内容

记一次Vite打包优化(vite 打包报错)

ruisui884个月前 (02-03)技术分析20

前言

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

目标和指标

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

目标

本次优化目标

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

指标

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

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

开始性能分析

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

Network 分析

Lighthouse 分析

Bundle 分析

Network 分析

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

Lighthouse 分析

使用

结果

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

Bundle 分析

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

安装

pnpm i rollup-plugin-visualizer -D

引入

import { visualizer } from 'rollup-plugin-visualizer'

const plugins = [vue(), visualizer()]

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

分析可以看出之前 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 分析

加载时间 平均节省 1

Lighthouse 分析

分数由 46 提升到 52

Bundle 分析

主包体积缩小 1 M 左右

总结

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

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/854.html

标签: vite.js
分享给朋友:

“记一次Vite打包优化(vite 打包报错)” 的相关文章

vue:组件中之间的传值

一、父子组件之间的传值----props/$emit1、父组件向子组件传值--props2.子组件想父组件传值-this.$emit('select',item)二、父组件向下(深层)子组件传值----provide/injectprovide:Object | () => O...

身体越柔软越好?刻苦拉伸可能反而不健康 | 果断练

坐下伸直膝盖,双手用力向前伸,再用力……比昨天前进了一厘米,又进步了! 这么努力地拉伸,每个人都有自己的目标,也许是身体健康、线条柔美、放松肌肉、体测满分,也可能为了随时劈个叉,享受一片惊呼。 不过,身体柔软,可以享受到灵活的福利,也可能付出不稳定的代价,并不是越刻苦拉伸越好。太硬或者太软,都不安全...

2024最新版:前端性能优化方案汇总

前端训练营:1v1私教,终身辅导计划,帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~Hello,大家好,我是 Sunday。前端性能优化一直是很多同学非常关注的问题,在日常的面试中也是经常会被问到的点。所以今天咱们就花一点时间来了解一下2024最新的...

佳能 EOS R8 深度评测

佳能 EOS R8 的定位是入门级全画幅无反光镜可换镜头相机。尽管在产品阵容中处于这一位置,R8 仍然是一个强大的相机,配备了先进的 R6 II 同款成像传感器、快速处理器和令人难以置信的自动对焦系统,体积小、重量轻、价格低。这款相机是发烧友、旅行者、家庭以及任何想要全画幅传感器相机的人的绝佳选择。...

vue-router是如何解析query参数呢? #前端

vue-router 中的 query 解析。1. 大家好,我是龙仔。今天来分享 vue-router 是如何解析快乐参数的,因为使用 vue 路由会传 query 参数和快乐参数,所以从 vue 的角度来看如何解析传递的快乐参数。2. 基础知识大家应知道,快乐参数结构如:a、b、c、a、b、c、a...

基于微信小程序+springboot+vue技术构建的开源微信商城

介绍基于 微信小程序 + springboot + vue 技术构建 ,支持单店铺,多店铺入驻的商城平台。项目包含 微信小程序,管理后台。基于java后台语言,已功能闭环,且达到商用标准的一套项目体系。技术栈平台功能介绍小程序演示图管理后端演示图小程序体验码演示地址1.0版演示地址说明后台管理端演示...