CSS、HTML、JS执行顺序以及阻塞问题

88 阅读1分钟

浏览器渲染流程:

  1. HTML解析生成DOM树,CSS解析生成CSS规则树;
  2. DOM树和CSS规则树结合形成Render树;
  3. 根据Render树渲染绘制,将像素渲染到屏幕上;

根据上述渲染流程可知:

  1. DOM解析和CSS解析并行执行,互不影响(解析即加载)
  2. 而DOM的渲染是需要DOM树和CSS规则树解析完成后才执行,换句话说CSS加载会阻止DOM树的渲染
  3. JS可能会操作DOM节点或者CSS样式,因此需要在样式表加载完之后才会执行JS

对于浏览器而言,页面加载主要有两个事件:

  1. DOMContentLoaded事件,即页面内容解析完成后执行的函数
  2. onLoad事件,即页面全部资源加载完毕后执行的函数(包括图片,视频等资源)

在HTML文件中,

由于CSS会阻塞DOM的渲染和JS的执行,JS也会阻止DOM的解析。如果页面同时存在css和js,且js在css后,那么这个DOMContentLoaded事件则会等css解析完后执行,其他情况下都不会等待css解析完毕,更不会等待其他资源的加载。