✊不积跬步,无以至千里;不积小流,无以成江海
前情提要
将页面部署到 Netlify上(gitHubpage好像有点太慢所以没有选,因为没花钱买域名所以只能暂时用netlify做一下测试)
deploy后发现页面的下载速度如图:
基本维持在4s左右这个样子,接下来就想怎么能够优化这个时间。
动态import
优化的第一步是想要尝试动态import。思路是将首页变成两部分:当前要看的部分 & 以后要看的部分。
来到router.tsx,发现home文件是先打包好,然后再放到下面去用,那么实现方法可以为:
javascript
// 1,用import()将路径变为动态
import('../pages/StatisticsPage')
// 2. 将前面加上箭头函数
() => import('../pages/StatisticsPage')
// 3. 用懒加载将函数包裹起来,并赋值
const StatisticsPage = lazy(() => import('../pages/StatisticsPage'))
// 4. 把page用suspense包起来
<Suspense> <StatisticsPage /> </Suspense>
// 5. 提供正在加载中需要显示的内容
<Suspense fallback={<Loading />}><StatisticsPage /></Suspense> }
需要注意的几个点:
- 动态引入需要默认的导出,但我们的文件都没有默认导出,所以要在最后加上默认导出
export default home
- 上面的操作能够保证对应页面只有访问到才能被加载。否则则不加载
- 由于我们首页的体积本来就很小,所以对home页面进行动态加载收益不大,对于那些页面上有很多图片的应该有很大帮助
- 动态加载就是懒加载
- 因为StatisticsPage页面比较大 所以对它下手了
打包后statastic页面大小为342KB
打包后index页面大小为139KB,压缩效率为64%
deploy后发现页面的下载速度如图:
实现页面速度从4s到0.9s的提升
Vite Code Splitting
第二步可以用手动分块的方法来实现对页面速度的优化,思路为:某个比较大的库单独打包,不要打包到index文件里面。vite.config.ts中添加代码如下:
python
build: {
rollupOptions: {
output: {
manualChunks(id: any) {
//如果路径中包含echars 我就单独返回echarts的包
if (id.includes('echarts')) {
return 'echarts'
}
if (id.includes('node_modules')) {
return 'vendor'
}
}
}
}
},
打包结果如下:
index又变小了,从400多KB到了100多KB。
deploy后发现页面的下载速度如图:
平均时间缩短为0.8s左右:
极限最低时间可以到达0.6s左右