背景
如果遇到一个老旧的项目,你的上司让你对项目首页进行优化处理,该如何上手呢?
1、Lighthouse谷歌插件,根据报告指标检测页面性能
- F12打开控制台-Lighthouse
- 点击分析网页加载情况按钮,对当前页面进行性能分析
- 我们只关注性能即可
报告如下图:
2、rollup-plugin-visualizer插件,分析代码打包大小的工具(webpack中使用webpack-bundle-analyzer)
- npm install --save-dev rollup-plugin-visualizer 安装依赖
- 配置
import { defineConfig, type PluginOption } from "vite";
import vue from "@vitejs/plugin-vue";
import { visualizer } from "rollup-plugin-visualizer";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
vue(),
visualizer({
open: true,
}) as PluginOption,
],
});
打包后 npm run build 会直接打开浏览器,可以查看各个代码块占用大小:
性能指标
LightHouse性能指标解释:
FCP:衡量的是打开网页后,浏览器渲染第一段 DOM 内容所用的时间
LCP:用于测量视口中最大的内容元素何时渲染到屏幕上。这粗略地估算出网页主要内容何时对用户可见。
优化方法
- 静态文件缓存(js,css等),图片和SVG进行压缩或者替换
- 文件太大导致加载缓慢,可以使用在线压缩工具把图片进行压缩,或者让UI换一个不失真的占用空间小的图片
- 也可以使用静态引用的方式,将图片放到服务器中
- 将无用的路由、引用的库删除,然后启用树摇
- 删掉无用路由很有用!加上树摇,可以去掉很多代码,vite中就已经默认启用的是树摇方式
- 路由懒加载 -路由配置页面,可以将component的引用方式,改为component: () => import(/* webpackChunkName: "xx" */ '@/views/xx.vue') 实现组件的异步加载
- 异步加载首页不需要用到的js和css文件
- 项目的index.html总有一些奇奇怪怪的js和css引入如下所示,会阻塞页面的解析,我们在前端首页解析完后(DOMContentLoaded事件)加载它们
<script>
document.addEventListener('DOMContentLoaded', () => {
;['./luckysheet/plugins/js/plugin.js', './luckysheet/luckysheet.umd.js'].forEach((item) => {
const script = document.createElement('script')
script.defer = true
script.src = item
document.body.appendChild(script)
})
;[
'./luckysheet/plugins/css/pluginsCss.css',
'./luckysheet/plugins/plugins.css',
'./luckysheet/css/luckysheet.css',
'./luckysheet/assets/iconfont/iconfont.css'
].forEach((item) => {
const link = document.createElement('link')
link.rel = 'stylesheet'
link.type = 'text/css'
link.href = item
document.head.appendChild(link)
})
})
</script>
- 此外还有服务端开启http2、开启Gzip压缩,笔者优化之前已经开启所以没有对比,就不再赘述,实际上提升也非常大
- 使用骨架屏代替普通loading,增强用户友好访问体验