gpt4 book ai didi

reactjs - 为什么 react 会延迟增加首次加载的时间

转载 作者:行者123 更新时间:2023-12-03 13:31:50 25 4
gpt4 key购买 nike

我有一个小但开发起来很有趣的应用程序。这是一个快速的实验,旨在了解更多有关 redux 和 React 的知识,我认为该应用程序已经足够成熟,可以开始学习优化了。

我做了一些纯组件优化尝试,但它们没有改善首次加载的时间,所以我继续。我尝试的下一个优化是使用 react 惰性来延迟加载一些我第一次不需要的组件。例如,我有一个错误组件,只有在必须显示不太可能的错误时才需要它,这就是我所做的,令人惊讶的是(根据灯塔)所有第一次指标(第一次交互的时间、第一次交互的时间)有意义的油漆等)变得更糟。

以下是尝试使用 React Lazy 之前的报告屏幕截图:

without react lazy

正如你所看到的,从性能的角度来看,没有太多需要改进的地方,但当我试图学习现代 react 时,我还是尝试了。这是我能够使用 React Lazy 拆分一个组件得到的最好结果:

with react lazy

如您所见,情况更糟。它检测到的问题并不都与缓存策略有关,它们是:

detected problems

似乎主线程越来越忙于解析所有 JavaScript。这对我来说没有意义,因为进入 Chrome 开发工具并详细检查网络请求(在性能选项卡上),结果包是并行下载的。然而,两个版本上的 bundle 大小几乎相同,只是应用程序的拆分版本有 5 个 block ,而不是 2 个:

第一个没有代码拆分的 bundle

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

第一个下载的 block :

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

第一个带有react惰性分割的 block (标记为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

我的结论是,React Lazy 会带来巨大的开销,只有在加载的组件的大小足够大的情况下才会有返回。然而,这是否意味着大型应用程序永远无法在第一次绘制时获得高分?我用 VUE 制作了一些更大的应用程序,其性能得分几乎为 90,所以我很确定我在这里做错了什么。

值得一提的是,第一个屏幕截图是从 github 页面提供的,而第二个屏幕截图是在本地提供的,但这不会影响手头的问题,不是吗?

该应用程序的非拆分版本的代码可在此处公开获取:https://github.com/danielo515/itunes

最佳答案

“脚本评估”最大耗时1.672ms。因此,尝试减少这个时间。

  1. 分析 JavaScript 的大小,哪些库可以替换为较小的库版本或使用纯 JavaScript。如果您使用 CRA,请尝试 Analyzing the BundleSize或 webpack-bundle-analyzer。例如代替 lodash也许你可以使用较小的库 lodash-es ;

  2. 使用服务器端渲染。考虑使用 loadable-components(来自 React doc 的建议)。但如果您使用速度较慢的服务器(或兑现水平较低),则可能会增加“Time to First Byte”的值;

  3. 使用Pre-Rendering into Static HTML Files

此外,一个非常有用的网页速度分析工具是 webpagetest.org .

关于reactjs - 为什么 react 会延迟增加首次加载的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53562306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com