浏览器解析html的时候从上往下的,遇到js(或css)的时候会停止解析html,并且待其下载后(如果是远程引用的话)再解析运行js(或css)。

为什么在解析js(或css)的时候需要停止html的解析呢

1. 先说js

因为js可能会操作dom,如果不阻塞html让其继续解析的,尤其是在js后面生成的dom可能不准,做的是无用功。

当前浏览器是怎么优化的?

Firefox和Webkit在执行js时,其他线程(预解析器)会解析html的其余部分,找出并加载需要通过网络加载的其他资源。通过这种方式,资源可以在并行连接上加载,从而提高总体速度。请注意,预解析器不会修改 DOM 树,而是将这项工作交由主解析器处理;预解析器只会解析外部资源(例如外部脚本、样式表和图片)的引用。

2. 再说css

咋一看感觉css又不操作dom,不需要跟js那样阻塞html的解析啊。但是实际上css还会阻塞js的执行,因为如果css不解析完的话,如果js里面需要获取某个dom的样式时,获取的是不准的。

当前浏览器是怎么优化的?

Firefox 在样式表加载和解析的过程中,会禁止所有脚本(够简单粗暴)。而对于 WebKit 而言,仅当脚本尝试访问的样式属性可能受尚未加载的样式表影响时,它才会禁止该脚本。


发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据