HTML5 脚本标签,延迟等待任何以前的异步脚本

Posted

技术标签:

【中文标题】HTML5 脚本标签,延迟等待任何以前的异步脚本【英文标题】:HTML5 script tags, does defer wait on any previous async scripts 【发布时间】:2015-04-17 16:47:22 【问题描述】:

html5 脚本标签加载指令看起来很酷https://***.com/a/24070373/1070291

是否可以异步加载一堆脚本,但根据异步脚本的完成等待单个脚本执行。

<script src="//some.cdn/jquery.js" async></script>
<script src="//some.cdn/underscore.js" async></script>
<script src="/my-app-which-uses-_-and-jquery.js" defer></script>

我的应用脚本是否保证在我的库之后执行,还是只会与其他延迟脚本一起按顺序执行?

【问题讨论】:

Script Tag - async & defer的可能重复 @AlexanderO'Mara 我认为这是一个不同的问题,链接的更多是关于异步/延迟的一般行为这个问题是关于两者在一起使用时的交互 也许,但它有你的答案。 @AlexanderO'Mara 真的吗?我在里面看不到。 jfriend00 谈论不使用所有异步,但不谈论异步和延迟是否交互 哦,我想我明白了。你在问defer 是否会等待async 【参考方案1】:

defer 存在时,它指定脚本在页面完成解析时执行。它不包括 async 脚本。

如果我遇到以下所有脚本都会记录执行日期的情况:

   <head>
       <link rel="stylesheet" href="style.css">
       <script src="script.js" async></script>
       <script src="script2.js" async></script>
       <script src="script3.js" defer></script>
   </head>
   <body>
     <script>
        console.log("Body script executed at : " + new Date());
     </script>
   </body>

我可能有这个输出:

  Body script executed at : Tue Feb 17 2015 00:05:08 GMT-0300
  script2.js:2 Script 2 executed at :Tue Feb 17 2015 00:05:08 GMT-0300
  script.js:2 Script 1 executed at:Tue Feb 17 2015 00:05:08 GMT-0300
  script3.js:2 Script 3 executed at :Tue Feb 17 2015 00:05:08 GMT-0300

script3.js (defer) 将等待“&lt;body&gt;”,但不会等待 script1.js (async)script2.js(async)

这是PLUNKER

【讨论】:

我认为 'script3.js (defer) 将等待 script1.js (async)、script2.js(async) 和 '' 才能被执行。不正确,当我尝试您的示例时,我在另外 2 个中间发生了 3 个 defer 将等待 ,而不是异步脚本。我会更新我的答案 答案似乎是否定的,真的有点可惜。 看起来这是一个好主意,只将没有人依赖它执行的脚本标记为异步。

以上是关于HTML5 脚本标签,延迟等待任何以前的异步脚本的主要内容,如果未能解决你的问题,请参考以下文章

script元素

JavaScript值延迟脚本和异步脚本

总结前端开发模式和规范 2HTML5中script的async属性异步加载JS

在html中使用js

JavaScript异步编程 异步的脚本加载

在 Wordpress 中延迟内联脚本