页面加载script标签的问题

250 阅读1分钟

一、概要

本文不会分析html解析,dom树、css树解析,painting、layout过程,仅分析script不同属性之间的差异。将记录html解析过程中,script标签的多种加载方式:

我们先通过一个图片理解下: image.png 图中我们可以看到,如果js脚本没有操作dom元素或者获取元素高度等代码,script标签的性能是最差的。因为script标签加载js,以及执行js代码会直接阻塞html解析和浏览器GUI线程。 image.png

二、那async 和 defer 到底有什么好处,好在哪里呢?

  1. defer
js加载不会阻塞html解析,但是js家在回来之后,不会立即执行,要等html解析完毕才按照defer script的顺序由上到下依次执行。所有script执行完毕之后,才会触发DOMContentLoaded事件。最后触发onload事件。

image.png

  1. async
js的加载是不会阻塞html解析的,但是js加载回来之后会立即执行,执行过程会阻塞html解析渲染。所以其实DOMContentLoaded是否执行不会被js加载影响,但是最终页面的onload会在所有js加载执行完毕之后被触发

image.png