一、概要
本文不会分析html解析,dom树、css树解析,painting、layout过程,仅分析script不同属性之间的差异。将记录html解析过程中,script标签的多种加载方式:
我们先通过一个图片理解下:
图中我们可以看到,如果js脚本没有操作dom元素或者获取元素高度等代码,script标签的性能是最差的。因为script标签加载js,以及执行js代码会直接阻塞html解析和浏览器GUI线程。
二、那async 和 defer 到底有什么好处,好在哪里呢?
- defer
js加载不会阻塞html解析,但是js家在回来之后,不会立即执行,要等html解析完毕才按照defer script的顺序由上到下依次执行。所有script执行完毕之后,才会触发DOMContentLoaded事件。最后触发onload事件。
- async