Inside look at modern web browser (part 3)

218 篇文章 18 订阅
12 篇文章 0 订阅

Render Process的内部工作

Render Process处理tab里的所有东西。有时一部分代码被worker threads来处理,当我们使用service worker or web worker。compositor and raster threads也运行在Render Process中

 

 

Parse

construction of a DOM

当RenderProcess接受到html data,main thread开始解析text string → Document Object Model(DOM)。在html代码写错的时候,生成DOM的算法,可以自动纠正

Preload

html中的css和img之类的外部资源,会提前加载好 

JS can block the parsing

因为JS可以重写html的内容,类似document.write(),所以当解析DOM的过程中,碰到<script>就会先load,parse and execute the js code 

告诉Browser加载资源的规则

例如async,defer,可以让js异步加载,而不block parse dom 

Style calculation 

 

 

 Layout

和DOM Tree长的差不多,但只包含了类似x,y的坐标信。确定layout  tree是个有挑战的事情,字体大小,什么时候换行,都很关键。在chrome,有一个很大的团队在做layout的工作

Paint

有了大小,位置,形状,颜色等等信息。我们还要确定渲染的顺序 

 

 Update rendering pipline is costly

    更新渲染的某一个stage,会导致后面的stage都要重新生成数据。这样的开销是非常大的。

以元素动画为例:

因为这些计算在RenderProcess的主线程,因此可以被JS block。我们可以用Web Workers防止阻塞

Compositing
复合,将图层分为多个layers,并独立光栅化,在需要的时候组合出新的帧。 在chrome first release的时候,是按照viewport有什么就重新光栅化未光栅的内容

同时,在这一步,主线程遍历layout tree并生成layer tree

 

不能每个元素都有一个layer tree node,这样操作数量太大,反而性能下降 

 

raster and composite off the main thread

一旦layer tree和paint order确认了,主线程将这些信息提交到compositor thread。一个layer可能很大,因此compositor thread将layer divides into tiles并且交到raster threads。光栅化线程将数据交给 gpu memory
 

 

 

合成器线程可以对光栅化线程进行优先级排序,因此viewport的内容可以先被渲染

一旦tiles都光栅化完成,合成器线程通过draw quads合成一个帧。然后合成帧通过IPC发给BrowserProcess,再交给GPU Process

A compositor frame is then submitted to the browser process via IPC. At this point, another compositor frame could be added from UI thread for the browser UI change or from other renderer processes for extensions. These compositor frames are sent to the GPU to display it on a screen. If a scroll event comes in, compositor thread creates another compositor frame to be sent to the GPU.
 

 

 

转自《Inside look at modern web browser (part 3)》学习笔记_Conchpeng的博客-CSDN博客 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值