javascript - document.ready 和 async 有什么区别?

标签 javascript jquery asynchronous document-ready

async 中的脚本在页面加载后加载,而 (document).ready 在 DOM 就绪时执行脚本,但是有什么区别呢?哪一个使页面加载速度更快?

<script>   
  $(document).ready(function(){
    //some code
  }); 
</script>

VS

<script async>   
    //some code
</script>

最佳答案

对于

<script async>   
    //some code
</script>

async属性将被忽略,因为 asynconly meaningful<script>有一个src属性:

This attribute must not be used if the src attribute is absent (i.e. for inline scripts). If it is included in this case it will have no effect.

所以,<script async>在你的问题中,一旦遇到标签就会阻止 HTML 解析 - 它根本不会异步操作。

如果脚本标签确实src ,然后 async tag会异步下载脚本(不阻塞HTML解析),脚本下载完成后立即执行脚本(无论页面是否先加载完毕)。请参阅here

$(document).ready(function(){需要 DOMContentLoaded在包含函数运行之前触发的事件,并且 DOMContentLoaded仅当 HTML 被完全解析后才会运行(尽管不一定是在所有资源下载完成之前,例如图像等)。

所以,async带有 src 的脚本标记可能会早于 $(document).ready(function(){ 执行.

请注意,有一个 defer标签,与 $(document).ready(function(){ 几乎相同 - 带有 defer 的脚本标签(和 src )将在 DOMContentLoaded 之前运行事件触发。

关于javascript - document.ready 和 async 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982951/

相关文章:

c# - JoinableTaskFactory.RunAsync 的正确用法是什么?

javascript - 与 promise 中的 .then() 混淆

javascript - if 语句的函数作用域

javascript - 从每个循环中的 javascript 匿名函数获取返回值

javascript - 谷歌图表 : duplicate calls in angular js

jquery多行选择

javascript - 根据 url 字符串添加外部 Javascript 文件

javascript - 如果有 img 元素,则禁用复选框

javascript - 如何使文本区域成为必填项

c++11 - 为什么在使用异步操作时没有堆栈溢出?