如何在DOMContentLoaded之前进行第一次绘制?

时间:2017-12-12 20:41:31

标签: javascript browser

我的印象是在触发DOMContentLoaded事件后发生了第一次绘制。特别是,因为我认为为了第一次绘制,需要渲染树,它依赖于DOM构造。此外,我知道DOM构造完成时会触发DOMContentLoaded事件。到现在为止,我认为订单是:

  • domInteractive
  • 延迟脚本执行
  • DOMContentLoaded
  • 第一次涂漆
  • 加载活动

但后来我遇到了这个帖子:"Why First Paint is happening before DOMContentLoaded"人们会遇到不同的顺序。不幸的是,我无法理解我错过了什么。

我正在尝试使用测试来重现在DCL事件之前发生的第一个油漆,尽管我认为这种行为违背了理论。如果有人可以用一个有效的例子来帮助我,那就完美了!

提前谢谢!

1 个答案:

答案 0 :(得分:2)

我认为你的问题是你试图将它们视为一个干净整洁的事件序列。

但事实并非如此。正在进行的每个进程基本上都是异步的,只要它准备好就会触发。没有严格有序的序列。

绘画与HTML分离,这是有充分理由的。

考虑一个非常大的HTML文档。如果您曾在较慢的网络上加载过一个,那么您就会知道它会在准备就绪时开始显示元素,而不必等待加载完整的HTML文件。

下载并解析完整的HTML后,就会显示DOMContentLoaded。一个缓慢的服务器实际上可能需要很长时间才能获得该文档,它不会永远只是在白色屏幕上。

对于许多文档,特别是小文档或加载速度非常快的文档,可能会DOMContentLoaded首先触发。在较大的一个,它之前可能会有一些涂料。