在 web 开发领域,优化页面加载时间至关重要。 <script> 标签的两个强大属性 - async 和 defer - 可以显着影响网站的性能。在没有彻底理解这些属性的情况下使用它们可能会影响性能并导致错误。让我们从基础开始,了解这些属性的作用以及何时使用它们。</script>
默认情况下,当浏览器遇到 <script> 标签时,它:</script>
此过程会减慢页面渲染速度,尤其是对于大型脚本或缓慢的连接。此外,如果脚本在某些 html 元素完全加载之前运行,则可能会导致错误,如果脚本未正确放置在文档中,这种情况通常会发生。
<script async src="script.js"></script>
<script defer src="script.js"></script>
attribute | download | execution | html parsing | main risk |
---|---|---|---|---|
none | blocks | immediate | paused | slow initial render |
async | parallel | asap | paused when downloaded | race conditions |
defer | parallel | after html | continues | delayed functionality |
了解具有不同属性的脚本的执行顺序对于管理依赖关系和确保正确的功能至关重要。其工作原理如下:
常规脚本(无异步或延迟):
异步脚本:
推迟脚本:
同时具有异步和延迟的脚本:
<script src="1.js"></script><script async src="2.js"></script><script async src="3.js"></script><script defer src="4.js"></script><script defer src="5.js"></script>
可能的执行顺序:
请注意,如果 1.js 下载时间较长,2 和 3 可以按任何顺序执行,甚至可以在 1 之前执行。
现代浏览器广泛支持异步和延迟。对于较旧的浏览器,请考虑使用脚本加载器或将脚本放置在
的末尾。