“异步延迟”一起使用时有啥作用? [复制]

Posted

技术标签:

【中文标题】“异步延迟”一起使用时有啥作用? [复制]【英文标题】:What does "async defer" do when used together? [duplicate]“异步延迟”一起使用时有什么作用? [复制] 【发布时间】:2018-11-09 22:10:23 【问题描述】:

我遇到了以下代码:

<script src="foo.js" async defer>

我知道&lt;script async...&gt; 将下载脚本,然后在暂停 html 解析时解析它。我也明白&lt;script defer...&gt;会在解析完所有HTML后下载脚本并解析。

&lt;script async defer...&gt; 有什么作用(例如 async 和 defer 一起使用)?

【问题讨论】:

asyncdefer的另一种解释:***.com/questions/10808109/script-tag-async-defer “async”和“defer”都异步加载外部脚本。所以你不需要同时设置它们,除非你真的需要“异步”,它在现代浏览器中具有更高的优先级。如果您想在页面加载后立即与页面进行交互,请使用“异步”。如果您的脚本依赖于其他脚本并且您应该以正确的顺序使用它们,请使用“延迟”。例如首先是 jQuery(延迟),然后是所有需要 jQuery 的 jQuery 插件。但永远不要将“异步”设置为 jQuery,因为一旦加载,它将在任何不可预测的地点/时间执行。 ***.com/a/68929270/7186739 【参考方案1】:

如果您同时指定两者,async 在现代浏览器上优先,而支持defer 但不支持async 的旧浏览器将回退到defer

对于支持表,请检查 caniuse.com 中的 async 和 defer。


P/s:这些属性只有在页面的head 部分使用脚本时才有意义,如果将脚本放在body 页脚中,它们就没有用了。

【讨论】:

那么现代浏览器,比如 Chrome,会在遇到它们时将脚本视为延迟或异步吗? async。需要明确的是,如果设置了 async 并且异步加载了脚本,则会忽略 defer。如果两者都存在并且浏览器仅支持defer,那么它将回退到defer 行为。

以上是关于“异步延迟”一起使用时有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 if 语句中使用 return 时有啥作用?

#pragma hdrstop without parameter 在多个文件中使用时有啥作用?

异步延迟 StreamReader.read

常用异步延迟方法

一种异步延迟队列的实现方式

text 脚本异步延迟