-
过程
- 打开页面,浏览器会从服务端获取HTML内容。
- 从上到下解析HTML元素。
- 元素内容首先被解析,此时浏览器还没开始渲染页面。标签里面一般还会有
- 当浏览器遇到script,会暂停解析并下载JavaScrip脚本。(所以script要放在底部,避免阻塞页面的渲染。)
- 当JavaScript脚本下载完成后,浏览器的控制权交给JavaScript引擎。
- 当脚本执行完成后控制权会交回给渲染引擎。
- 继续渲染元素,此时元素内容开始被解析,浏览器开始渲染页面。
-
defer和async
- script:会阻塞html的解析,等待js文件下载并解析完成,才会继续解析html。
- async script: 异步下载js文件(这个时候不会影响html渲染),文件一旦下载完成立即执行(这个阶段可能会阻塞html的解析)。
- defer script:完全不会影响html的解析,html解析完成后再按顺序执行脚本。
-
可以看一下这篇文章