React实战-实现性能优化

✊不积跬步,无以至千里;不积小流,无以成江海

前情提要

将页面部署到 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> }

需要注意的几个点:

  1. 动态引入需要默认的导出,但我们的文件都没有默认导出,所以要在最后加上默认导出 export default home
  2. 上面的操作能够保证对应页面只有访问到才能被加载。否则则不加载
  3. 由于我们首页的体积本来就很小,所以对home页面进行动态加载收益不大,对于那些页面上有很多图片的应该有很大帮助
  4. 动态加载就是懒加载
  5. 因为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左右

相关推荐
子兮曰1 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
paopaokaka_luck4 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787054 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH4 小时前
HTML 的 <video> 元素
前端·html
weixin_448119945 小时前
Datawhale Easy Data × AI:构建知识与记忆驱动的 Agent笔记8
人工智能·笔记·react.js
溪语流沙5 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
逐光者9335 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC5 小时前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
CDwenhuohuo5 小时前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师5 小时前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划