我有一个小而有趣的开发应用程序。这是一个快速的实验,可以更多地了解 redux 和 react,我认为应用程序已经足够成熟,可以开始学习优化了。
我做了一些纯粹的组件优化尝试,但它们并没有改善首次加载的时间,所以我继续前进。我尝试的下一个优化是使用 react lazy 来延迟加载一些我第一次不需要的组件。例如,我有一个错误组件,仅当我必须显示一个不太可能的错误时才需要它,这就是我所做的,并且令人惊讶的是(并且根据灯塔)所有第一次度量(第一次交互的时间,第一次的时间)有意义的油漆等)变得更糟。
这是在尝试使用 react lazy 之前的报告截图:
正如你所看到的,从性能的角度来看,没有太多需要改进的地方,但是当我试图学习现代反应时,我还是尝试了。这是我使用 reactlazy 拆分一个组件所能得到的最好的:
如您所见,情况更糟。它检测到的问题并非都与缓存策略有关,它们是:
似乎主线程越来越忙于解析所有的 javascript。这对我来说毫无意义,因为转到 Chrome 开发工具并详细检查网络请求(在性能选项卡上),结果包是并行下载的。然而,两个版本的包大小几乎相同,只是应用程序的拆分版本有 5 个块而不是 2 个:
第一个没有代码拆分的包
URL
bundle.js
Duration
45.62 ms
Request Method
GET
Priority
High
Mime Type
application/javascript
Encoded Data
6.5 KB
Decoded Body
31.0 KB
第一个带有反应惰性拆分的捆绑包
URL
bundle.js
Duration
28.63 ms
Request Method
GET
Priority
High
Mime Type
application/javascript
Encoded Data
7.1 KB
Decoded Body
33.7 KB
第一个下载的块:
Network request
URL
0.chunk.js
Duration
255.83 ms
Request Method
GET
Priority
High
Mime Type
application/javascript
Encoded Data
579 KB
Decoded Body
2.7 MB
第一个带有反应延迟拆分的块(标记为 5,但实际上是第一个):
URL
5.chunk.js
Duration
276.40 ms
Request Method
GET
Priority
High
Mime Type
application/javascript
Encoded Data
559 KB
Decoded Body
2.6 MB
我的结论是,reactlazy 引入了显着的开销,只有在加载的组件的大小足够大时才会得到回报。但是,这是否意味着大型应用程序在第一次绘制时永远无法获得高分?我用 VUE 做了一些更大的应用程序,性能接近 90,所以我很确定我在这里做错了什么。
值得一提的是,第一个屏幕截图是从 github 页面提供的,而第二个屏幕截图是在本地提供的,但这不应该影响手头的问题,不是吗?
该应用程序的非拆分版本的代码可在此处公开获得:https ://github.com/danielo515/itunes


