Javascript 什么时候可以使用异步?

Javascript 什么时候可以使用异步?,javascript,Javascript,异步脚本加载是我现在学习的内容。我有一个关于脚本标记中的asyncattr-的问题 下面是一些信息,我的问题是关于这个-当存在时,它指定脚本一可用就会异步执行。行 问题: 如果我有两个脚本: <script async src="url1.js"><script> // 200kb <script async src="url2.js"><script> // 2kb //200kb //2kb 第二个脚本必须在第一个脚本之后执行(它使用一些对

异步脚本加载是我现在学习的内容。我有一个关于脚本标记中的
async
attr-
的问题

下面是一些信息,我的问题是关于这个-当存在时,它指定脚本一可用就会异步执行。

问题: 如果我有两个脚本:

<script async src="url1.js"><script> // 200kb
<script async src="url2.js"><script> // 2kb
//200kb
//2kb
第二个
脚本
必须在第一个脚本之后执行(它使用一些
对象
函数
)-页面加载后会这样吗?第一个脚本是否会在加载后首先执行,然后-第二个脚本是否会执行

从上面的粗体字符串可以看出,我的理解是,加载
脚本
的速度越快,执行速度就越快,在我们的示例中,我们会出现错误,而第一个
脚本
尚未加载和执行,但第二个脚本已经在尝试获取它。(当我们可以使用
async
脚本加载时?仅当我们的脚本彼此不独立时?)


p、 如果url2.js依赖于url1.js,您不能对脚本文件使用异步加载,您必须使用同步加载来确保在url2.js之前加载和执行url1.js

使用异步时,可能会出现两种情况:

  • url1.js加载并执行,然后url2.js加载并执行。这没关系,因为url1将为url2做好准备
  • url2.js加载并执行,然后url1.js加载并执行。这将失败,因为url2依赖于url1,而url1在url2启动时尚未就绪 使用非异步加载只能发生一种情况,即url1.js在url2.js加载和执行之前加载和执行,如果它们相互依赖,这就是您所需要的


    在异步加载中,您无法控制它们的执行时间,它们在加载后立即执行。

    如果没有
    async
    属性,浏览器将停止处理页面并首先下载引用的脚本;下载并执行脚本后,它将继续处理页面上的下一个标记。这有两个后果:

  • 所有脚本都保证按照它们包含在HTML中的顺序加载,并且依赖关系保证正确解析
  • 如果早期包含这些脚本,则页面加载明显延迟。同步脚本应该始终包含在页面的末尾,以免让访问者不必要地等待
  • 如果设置了
    async
    属性,浏览器将继续加载页面而不停止处理
    script
    标记,并将在稍后加载脚本。加载脚本的确切时间是未定义的,您不能依赖于任何特定的执行顺序。如果两个脚本之间存在依赖关系,则不能同步加载它们
    async


    因此,
    async
    加载只对没有其他依赖项的脚本有用或:将脚本挂接到
    窗口。onload
    事件并避免在此之前进行任何交叉引用;在加载所有脚本(包括
    async
    脚本)后,将触发该事件。

    我们之前曾问过类似的问题

    关于执行顺序,JavaScript的执行按照HTML中的顺序进行。如果您的页面在某些事件上依赖JavaScript,并且如果JS方法在页面之前加载,那么它们将导致JS错误


    我建议您尽可能使用回调函数来避免上述错误。是开始学习回调函数以及如何实现它们的好地方

    如果在
    窗口之后调用第一个脚本
    函数
    。从第二个脚本调用onload
    事件?他们会工作吗?(换言之:
    load
    事件在所有
    async scripts
    加载后触发?而
    DOMContentLoaded
    事件呢?)是的,如果您将脚本挂接到
    window.onload
    并避免任何交叉引用,直到
    window.onload
    触发为止,您还保证解决了所有依赖关系。这也是一个有用的模式。