最近在研究浏览器原理,下面是我对浏览器原理的理解(不对的欢迎指正):
浏览器加载页面是有这么几个过程,
解析html构建dom,
与此同时css解析器会解析css生成cssom(这里也有一个问题就是,解析html跟css 是不是同时开始的,还是解析html遇到style或link标签时才开始解析css),
根据DOM和CSSOM,生成一棵渲染树,
布局,
绘制
上述过程是一个渐进的过程,也是单一线程控制的,我们称该为UI线程。在第一步解析html时,遇到script标签时,这时UI线程会挂起,会通知javascript引擎线程来执行它,如果是外部脚本先下载在执行。javascript引擎线程执行完后,UI线程开始一步步的按照上面的过程生成页面。
但是看到“处理脚本和样式表的顺序”一节中的预解析,对于他的描述不是很明白。
原文是这样讲的:
预解析
WebKit 和 Firefox 都进行了这项优化。在执行脚本时,其他线程会解析文档的其余部分,找出并加载需要通过网络加载的其他资源。通过这种方式,资源可以在并行连接上加载,从而提高总体速度。请注意,预解析器不会修改 DOM 树,而是将这项工作交由主解析器处理;预解析器只会解析外部资源(例如外部脚本、样式表和图片)的引用。
我不知道上面那预解析中的其他线程是不是指的firefox的同时下载图片,css的2个线程,chrome同时下载图片,css4个线程呀?不包括js脚本?
只有在javascript引擎线程来执行,这个其他线程才开台并行加载资源?
已解决!