3.JS的加载与阻塞 来源:https://w0hog67yl81.feishu.cn/wiki/XkI0w9UMUijr1HkK0PBctpjNnbe 采集状态:已完成正文采集;已滚动到底部并复查 一、 JavaScript在渲染流程中的角色​ ​ JavaScript为网页带来了交互性,但它也是一把双刃剑。浏览器在解析HTML构建DOM的过程中,一旦遇到 • 行为: ◦ 脚本的下载过程与HTML解析并行进行(异步下载)。 ◦ 脚本下载完成后,HTML解析器会立即暂停,并执行该脚本。 ◦ 执行完毕后,恢复HTML解析。 • 执行顺序: 多个带 async 的脚本,它们的执行顺序是不确定的。哪个脚本先下载完,哪个就先执行。​ • 适用场景: 适用于那些不依赖DOM、也不依赖其他脚本的独立脚本。例如,网站分析、广告脚本等。 2. defer (Deferred)​ • 行为: ◦ 脚本的下载过程与HTML解析并行进行(异步下载)。 ◦ 脚本下载完成后,并不会立即执行。它会等待整个HTML文档解析完毕(即 标签被解析后),然后在 DOMContentLoaded 事件触发之前执行。 • 执行顺序: 多个带 defer 的脚本,它们的执行顺序会按照它们在HTML中出现的顺序来依次执行。​ • 适用场景: 适用于那些需要操作DOM,或者脚本之间有依赖关系的场景。这是目前最推荐的脚本加载优化方案。 四、 对比总结​ 属性 解析器阻塞 脚本下载 脚本执行时机 执行顺序 (无) 是 同步 下载后立即执行 按照在HTML中的顺序 async 否 (仅在执行时阻塞) 异步 下载后立即执行 不保证顺序 defer 否 异步 HTML解析完成后,DOMContentLoaded之前 按照在HTML中的顺序 通过合理使用 async 和 defer,你可以显著减少JavaScript对关键渲染路径的阻塞,从而加快页面加载速度,提升用户体验。​ ​ 本文暂未被其它文档引用