通过4个方向降低首屏时间
- 下载静态资源的时间
- 下载页面组件的时间
- 页面渲染的时间
- js 同步函数的执行时间
压缩静态图片,降低下载时间
组件异步引入、非首屏的库异步引入、弹窗组件异步引入。降低首屏时下载的资源总量,多利用空闲时间下载资源并建立缓存。
const G6 = await import('@antv/g6');
export default {
mounted() {
setTimeout(() => import('@antv/g6'), 3000)
}
}
首屏的页面组件中需要调用的接口请求,从created事件中移出到路由守卫里,和页面组件下载同时进行。降低网络请求总时长
import { Route } from 'vue-router/types/router'
const routes = [
{
name: 'example',
meta: {
// 需要在进入页面时执行的函数
onRouteEnter: (to: Route, from?: Route) => {
}
}
}
]
router.beforeEach(async (to, from, next) => {
const toRouteName = to.name || ''
const isPageChange = toRouteName !== from.name
if (isPageChange) {
const onRouteEnter = to.meta.onRouteEnter
if (typeof onRouteEnter === 'function') {
await onRouteEnter(to, from)
}
}
next()
})
降低CSS的计算量,降低渲染时间
少用flex布局,用 display: inline-block; float; veralign @media等计算量少的样式属性替换。
少用百分号尺寸和calc,用写死的长度替换。
用 webpack 的 splitChunks拆包。
目的是让每个模块的包体积大小尽量差不多。
如果拆包太细,会导致占用请求数过多,造成请求阻塞。
如果单个包体积太大,下载时间就长。
利用 webpack 的 bundle-analyzer 分析拆包结果