【问题标题】:Does ReactDOM wait for the onload event to start rendering?ReactDOM 是否等待 onload 事件开始渲染?
【发布时间】:2019-09-20 21:56:36
【问题描述】:

假设我有一个由 ReactDOM 渲染的客户端渲染的 React 应用,

<body>

<div id="root"></div>
<script src="/mybundle.js"></script> <!-- rendering happens here -->

<script async src='https://cdn.third-party.com/segment.js'></script>
<script async src='https://cdn.third-party.com/google_analytics.js'></script>
<script async src='https://connect.facebook.net/en_US/fbevents.js'></script>
<script async src='https://connect.facebook.net/en_US/sdk.js'></script>
<!-- etc.. various other 3rd party trackers and crap we have to load -->

</body>

我的理解是,即使指定了async,这些第三方库也会延迟onload 事件,直到它们的各种脚本被加载。

这会延迟我的 react 应用的渲染吗?

我已经对此进行了测试,如果我删除所有第三方 javascript,我们的第一次有意义的绘制在受限制的机器上会快 2 秒左右。这些库都表明它们不会减慢您的网站速度,但在实验上它们确实会。

与第 3 方库的性能,

移除所有第 3 方库后的性能,

有没有什么方法可以加载这些第三方库而不会破坏我的客户端呈现的单页应用程序的性能?

我知道.. 2.75 秒仍然非常慢。在进行重大改写之前,我试图快速取得胜利。

【问题讨论】:

  • 嗨,我最近也有同样的问题,我发现 Addy Osmani 的这篇文章很有用 addyosmani.com/blog/script-priorities 也许你的一些外部脚本可以推迟
  • 所有脚本都是独立的还是依赖于每个人的?
  • 如果您将async 属性与defer 交换或添加defer 标签会发生什么,这有帮助吗?
  • 这些都在body标签的末尾。我的印象是defer 在那里使用时什么都不做,但我会试试的。脚本有些独立。他们加载用于记录客户事件的分析跟踪器,但这绝对不是关键的,我们应该能够找到一种方法来延迟使用它们。

标签: javascript html reactjs single-page-application


【解决方案1】:

我的消息来源表明它不会等待 onload 事件。

链接来源:

图片来源:

【讨论】:

  • 不确定您的消息来源在哪里表明这一点。我没有看到任何地方提到 onload 事件。该图也没有说明 onload 事件?不知道你是怎么得出这个结论的。
  • “预提交”阶段读取 DOM,提交阶段也与 DOM 一起工作
  • 见,link
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 2016-03-11
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多