乐闻世界logo
搜索文章和话题

script标签中的“async”和“defer”属性的作用是什么?

2 个月前提问
2 个月前修改
浏览次数14

1个答案

1

asyncdefer 属性都是用于控制 HTML 页面加载时脚本的行为的,它们都是 <script> 标签的属性。它们的主要目的是优化页面加载时间,但它们的工作方式略有不同。

async 属性

当您在 <script> 标签中使用 async 属性时,它会指示浏览器异步加载 JavaScript 文件。这意味着浏览器可以继续解析 HTML 页面的其余部分,而不需要等待该脚本完全加载和执行。一旦脚本文件加载完成,浏览器会中断页面解析来执行该脚本。

使用场景示例: 假设您有一个用于分析用户行为的第三方脚本,例如 Google Analytics。您可以使用 async 属性来加载这个脚本,因为它对初始页面加载的性能影响较小,并且其加载顺序对网站功能通常没有影响。

html
<script async src="https://www.google-analytics.com/analytics.js"></script>

defer 属性

使用 defer 属性时,脚本同样会被异步加载,但与 async 不同的是,脚本会在整个页面解析完成后,但在 DOMContentLoaded 事件触发之前,按照它们在文档中出现的顺序执行。

使用场景示例: 假设您的网页依赖于一个或多个 JavaScript 文件来正确渲染页面内容或功能(例如,使用 JavaScript 动态生成部分页面内容)。在这种情况下,使用 defer 属性将非常有用,因为它确保了脚本在整个页面都解析完毕后才执行,同时保持了脚本的执行顺序。

html
<script defer src="scripts.js"></script>

总结

  • async:适用于那些不依赖于其他脚本且其他脚本也不依赖于它的独立脚本,如广告脚本或计数器。
  • defer:适用于那些需要保证执行顺序,且必须等到整个页面解析完毕后才能执行的脚本,如依赖于 HTML 页面的脚本。

使用 asyncdefer 的选择取决于脚本与页面内容的关系以及脚本之间的依赖关系。

2024年7月18日 00:19 回复

你的答案