Bhu*_*van 6 javascript html5 dom rendering css3
我试图了解HTML在浏览器中的屏幕上呈现的时间.
我读了这个SO答案,并尝试了一些用例,我观察到一些不适合链接中共享的模型的东西,
我似乎也找不到一致的观察思维模型.
什么是适合所讨论案例的浏览器呈现顺序?
案例A与大多数答案中描述的顺序不一致.Huray!让我们继续.
所以Case-B显示它没有呈现M1,它在渲染之前等待CSS下载. 因此渲染器可能需要在渲染之前知道CSS.
案例:C 图像C.
所以从案例B开始,我们假设渲染器可能需要知道CSS.
让我们看看案例C:
编辑: 提出的思维模型解释了上述行为..(但需要审查/改进)
Script 不是渲染器阻止标记 link 是一个渲染器阻止标记 通过上面的模型我们可以解释CASE B和CASE C:
CASE B说明:
同样我们可以干运行CASE C,它完全适合上述模型.
我的模型是正确的还是有问题的?
你几乎是对的。除了它更简单之外 - 渲染器是被动的并且不接收“阻塞信号”。在有人要求它之前,它不会渲染(更新显示以反映 dom 树)。
您的 HTML 无效 - 您不能放入<link rel=...>正文中。(实时 HTML 4.2.4)
正如您所想的,样式表是一种渲染阻塞资源 - 它将阻止渲染内容,而脚本则会暂停并渲染已解析的内容。
我将这样解释:
情况B:M1 - stylesheet - M2 - script - M3
这些行为都是故意的。曾几何时,js 速度很慢,脚本需要很长时间才能运行,而样式表对于默认隐藏元素来说过去(现在仍然)很重要。时间可能已经改变,但这些行为不太可能改变。
情况C:M1 - script - M2 - link - M3
实际的显示过程,就线程而言,是非常 复杂的,并且在某种意义上,不同浏览器的差异很大。例如,DOM 不是线程 安全 的。想想这意味着什么。
为了简单起见,您可以将浏览器处理想象为数据和事件在各个模块之间流动。以下是一些 Firefox 渲染子系统: