CSSOM和DOM构造是否发生在并行线程上?

问题描述 投票:0回答:1

我一直在网上寻找这个答案。但是没有得到这个问题的具体答案。我想知道每个过程在渲染中是如何工作的(即使用多线程或单线程)

javascript google-chrome browser
1个回答
0
投票

为了呈现浏览器必须显示到do multiple complex steps的页面,通常这些步骤是:解析/加载,样式计算,创建布局树,绘制,最后是Rasterisation(在此步骤中,浏览器获取结果这是通过前面所有步骤生成的,然后将该信息转换为在屏幕上绘制的彩色像素)。

简而言之,在解析/加载步骤中,主线程开始解析html,并创建dom树,当它达到-甚至达到峰值时-它将在后台网络线程中加载这些资源。 )。除非您推迟加载这些资源,否则浏览器仍然需要在执行下一步之前解析/执行它们。

[在样式计算步骤中,浏览器确定每个节点的样式,并创建cssom,这也发生在主线程中,并且需要在创建dom之后进行。样式不能与dom解析同时进行计算,因为样式需要基于css选择器来计算,并且css选择器在没有完全构造dom树并可以读取的情况下是没有意义的。

计算样式后,浏览器开始创建布局树-您可以将布局树视为由较小的矩形创建的巨大矩形网格,浏览器可以知道每个元素的位置以及整个网格中哪个小矩形具有x,y坐标和边界框大小。此步骤也发生在主线程中,并且不能与样式计算并行,因为它需要dom和cssom作为输入才能产生其输出。

在绘画之后,也发生在主线程中,并且再次需要以前的结果作为输入,因此不能与布局创建并行,在这一步中,浏览器为整个布局树创建绘画结构。

从这里,浏览器将所有这些信息提交给Compositor thread,这是开始并行发生的事情,合成器线程知道如何获取布局树,并将其合成为您看到的帧。合成器线程非常聪明,它知道如何区分工作负载的优先级和并行度,将工作负载发送到不同的栅格化线程,这些线程负责为您提供在屏幕上绘制的彩色像素。

Compositor线程不仅用于初始渲染,而且还可以在主线程想要渲染东西的任何时候使用。实际上,当您滚动时,您正在合成器线程上滚动,最近,铬将很多东西移到了合成器线程中,因此,即使主线程被阻塞,UI仍可正常运行。如果您想了解有关合成器线程的更多信息,还可以看到this link(以及i previously shared中的那个)

© www.soinside.com 2019 - 2024. All rights reserved.