js单线程,浏览器多进程,所以js执行和DOM渲染顺序:
图一: 页面渲染,遇到script标签,页面停止渲染,js下载,js执行,执行结束,页面继续渲染 图二:async 页面渲染,遇到script标签,页面渲染,同时js下载解析,解析之后,js执行,页面停止渲染,执行之后,页面开始渲染
图三:defer 页面渲染,遇到script,页面渲染,同时下载js并解析,页面渲染到,js开始执行
相同点和不同点: async和defer在网络下载方面都是异步的,和HTML解析相比 async下载了立即执行,每一个异步脚本不需要关心其他脚本是否执行完,自己只要下载了就会执行,所以执行顺序无法控制,和网络请求和文件大小有关 defer下载后等html全部解析完,才执行,且按顺序执行