多核时代的浏览器应该是这样:再探Mozilla浏览器布局引擎Servo
我们曾报道 Mozilla和三星正在合力开发下一代浏览器引擎Servo ,作为一种运行在ARM架构Android系统上的浏览器布局引擎,它能充分利用现代移动设备中的多核处理器,实现并发任务、并发布局,提高安全性能。
并发任务
为了把网页展示在用户面前,浏览器需要先将HTML解析为DOM树,再根据样式表绘制布局并渲染内容,最后执行JavaScript。与现代浏览器不同,Servo能将上述三个步骤分成三个能并发执行的任务,而这种能力则得益于Mozilla所开发的Rust语言的并发模型。
Rust语言中的每个任务都是相互独立的,占用独立内存,利用消息传递系统异步传递数据,故更易实现并发性。
Servo在处理iFrame时也有更好的性能,iFrame与父页面相互独立,并发加载,且具有独立的脚本任务,故不会干扰父页面脚本执行,另外,即使在加载iFrame时崩溃掉了也无碍父页面的正常显示。
并发布局
要绘制布局,浏览器需要构建DOM树,并计算各个元素的相对位置。任何一个浏览器在处理这步时都会从父元素一直深入到每一个子元素,按照一定顺序来进行,而Servo的特别之处在于,它会把页面中那些不会影响其它元素属性的独立部分(比如,具备position:absolute属性的元素)识别出来,让它们与剩余部分并行渲染。
Mozilla平台工程师Josh Matthews将该项技术称之为任务窃取(work stealing)负载均衡策略,即把高负载处理器队列的任务转移到其它处理器,从而充分利用多核处理器。
Servo的并发布局特性会极大提高移动设备浏览器的性能,甚至还能延长电池寿命,因为处理器负载均衡时消耗的电能要少得多。
安全性能
Matthews表示,应用于Firefox的布局引擎Gecko有太多由C++内存管理错误导致的安全隐患,而Rust语言则没有这些问题,另外,它的并发任务特性也有效地防止了数据竞争(data race)。
另外,出于性能方面的原因,Servo会在Google Native Client(NaCl)沙盒进程中运行不安全的C语言代码,无疑中又加了几层保护。
What‘s next?
Servo正由Mozilla五人工程师团队、志愿者与三星研究团队共同开发,预计在年底能构建出一个相对可用的版本。
目前,Servo团队正在着手解决DOM API、CSS相关问题,同时也在把Servo移植到Windows。
[本文参考以下来源: zdnet.com ]