浏览器渲染流程:
- HTML解析生成DOM树,CSS解析生成CSS规则树;
- DOM树和CSS规则树结合形成Render树;
- 根据Render树渲染绘制,将像素渲染到屏幕上;
根据上述渲染流程可知:
- DOM解析和CSS解析并行执行,互不影响(解析即加载)
- 而DOM的渲染是需要DOM树和CSS规则树解析完成后才执行,换句话说CSS加载会阻止DOM树的渲染
- JS可能会操作DOM节点或者CSS样式,因此需要在样式表加载完之后才会执行JS
对于浏览器而言,页面加载主要有两个事件:
- DOMContentLoaded事件,即页面内容解析完成后执行的函数
- onLoad事件,即页面全部资源加载完毕后执行的函数(包括图片,视频等资源)
在HTML文件中,
由于CSS会阻塞DOM的渲染和JS的执行,JS也会阻止DOM的解析。如果页面同时存在css和js,且js在css后,那么这个DOMContentLoaded事件则会等css解析完后执行,其他情况下都不会等待css解析完毕,更不会等待其他资源的加载。