浏览器渲染机制

以webKit为例,自己参考了一些资料以及结合自己的测试,对浏览器的渲染过程做了一点功课。这是一个复杂的过程,自己了解的也只是一个大概过程,记录下来,留着以后慢慢体会。

渲染的过程大致为:

  1. 解析HTML
  2. 生成DOM树
  3. 生成CSS树
  4. 生成Render树
  5. 布局
  6. 绘制

解析HTML,浏览器为了缓解渲染被阻塞,会预加载资源并行发起css、图片、js的请求。等外联的css文件下载完,将CSSOM和DOM一起生成RenderTree,之后进行layout和painting,期间js的执行会被位于前面的css文件的加载过程阻塞,同时外部js的加载会中断DOM树的更新,js之前的部分会直接渲染,js之后的部分会在js执行完之后渲染。

如此看来css资源的加载对于页面的渲染起了关键作用。

load、DOMContentLoaded和readystatechange的触发时机

  • 当所有资源(cssjs图片)都加载完成触发load事件
  • 页面文档完全加载并解析完毕(dom树生成js的加载和执行),不等待css图片的加载,触发DOMContentLoaded事件。正如上面说到的js的执行会在之前的css文件加载完成之后才执行,从这方面来说,该事件的触发任然受css的影响
  • dom节点的状态发生变化的时候触发readystatechange事件