Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步加载脚本并具有回退功能_Javascript_Deferred Execution - Fatal编程技术网

Javascript 异步加载脚本并具有回退功能

Javascript 异步加载脚本并具有回退功能,javascript,deferred-execution,Javascript,Deferred Execution,我的目标是在浏览器支持延迟或异步时异步加载脚本。 如果浏览器既不支持也不支持,我不关心异步加载(不是我的错)。 我想确保任何脚本只有在满足其先决条件(例如jQuery加载)时才会执行。 我希望在加载其他脚本时加载脚本(仅当浏览器支持延迟或异步时) 我只想使用浏览器的API来实现这一点。我不希望浏览器加载任何可靠(或不可靠)的脚本,不管它们有多小 这必须与IE8+、Gecko v.1.9.1+(如firefox 3.5.*或firefox 9.0+、webkit(如chrome)、presto(如

我的目标是在浏览器支持延迟或异步时异步加载脚本。
如果浏览器既不支持也不支持,我不关心异步加载(不是我的错)。
我想确保任何脚本只有在满足其先决条件(例如jQuery加载)时才会执行。 我希望在加载其他脚本时加载脚本(仅当浏览器支持延迟或异步时)

我只想使用浏览器的API来实现这一点。我不希望浏览器加载任何可靠(或不可靠)的脚本,不管它们有多小

这必须与IE8+、Gecko v.1.9.1+(如firefox 3.5.*或firefox 9.0+、webkit(如chrome)、presto(如Opera)配合使用。对于那些我没有提到的版本,我指的是最新的稳定版本

如果可能的话,我不想要任何不容易的脚本。我只是需要一些简单的东西来做这项工作。这意味着:
如果可能的话,我不希望像AJAX调用或带有某些方法的奇特对象这样的东西像我在其他页面中看到的那样进行一些变通。这些是为了在不支持异步或延迟的浏览器中强制异步加载脚本


我重复一遍:我不需要任何花哨的东西来使脚本异步。如果浏览器不支持延迟或异步,我不在乎。我只关心脚本的加载,以便在满足其先决条件后执行每个部分,如果浏览器支持它,则首先使用async或defer

,使用诸如
jQuery
之类的库,使整个过程在浏览器中变得非常简单和可靠。它可能会增加页面的下载大小(非常小的数量),但高效的脚本加载/执行所获得的速度几乎总是超过这一点

关于脚本异步和延迟属性:

  • async=“async”
    :在IE8/9根本不支持的脚本标记上,脚本立即执行(根据您的问题,这是正常的)

  • defer=“defer”
    :按照延迟脚本在HTML中出现的顺序,在DOM就绪之前,将开始加载脚本上的标记。但是,在Firefox上,脚本通常会在dom就绪后执行。这种差异使得
    defer
    作为一种确保在dom就绪后执行函数之前加载脚本的方法不可靠

  • 不使用jQuery时的一般指导原则:

  • 如果脚本具有下游依赖项,则必须将其作为标准脚本标记放置在正文标记的末尾,并在文档准备就绪后执行内联标记。否则,无法保证脚本将在执行依赖项之前执行。Firefox是这里的主要问题,“延迟”脚本可能在DOM就绪后仍未完成

  • 如果脚本没有下游依赖项,则将其放置在body标记的末尾,并在脚本标记上使用async=“async”属性。IE将立即渲染,其他人收到后将渲染

  • 使用
    jQuery时的一般指导原则

  • 只在
    中放置jQuery

  • $.getScript()
    的形式执行所有其他脚本

  • 如果脚本需要尽快执行(如分析),请在正文顶部使用
    $.getScript
    (这将是一个非阻塞请求,但在客户端收到文件后将立即处理)

  • 如果脚本可以等待DOM就绪,则将
    $.getScript()
    调用包装到
    $(function(){})

  • 如果一个脚本有许多下游依赖项,则让每个依赖项都将自己注册到特定脚本的回调函数中

  • $(函数(){
    $.getScript(“script.js”,function()){
    for(var i=0;i
    首先,使用诸如
    jQuery
    之类的库可以使整个过程变得非常简单,而且跨浏览器也非常可靠。它可能会增加页面的下载大小(非常小的数量),但高效的脚本加载/执行所获得的速度几乎总是超过这一点

    关于脚本异步和延迟属性:

  • async=“async”
    :在IE8/9根本不支持的脚本标记上,脚本立即执行(根据您的问题,这是正常的)

  • defer=“defer”
    :按照延迟脚本在HTML中出现的顺序,在DOM就绪之前,将开始加载脚本上的标记。但是,在Firefox上,脚本通常会在dom就绪后执行。这种差异使得
    defer
    作为一种确保在dom就绪后执行函数之前加载脚本的方法不可靠

  • 不使用jQuery时的一般指导原则:

  • 如果脚本具有下游依赖项,则必须将其作为标准脚本标记放置在正文标记的末尾,并在文档准备就绪后执行内联标记。否则,无法保证脚本将在执行依赖项之前执行。Firefox是这里的主要问题,“延迟”脚本可能在DOM就绪后仍未完成

  • 如果脚本没有下游依赖项,则将其放置在body标记的末尾,并在脚本标记上使用async=“async”属性。IE将立即渲染,其他人收到后将渲染

  • 使用
    jQuery时的一般指导原则

  • 只在
    中放置jQuery

  • $.getScript()
    的形式执行所有其他脚本

  • 如果脚本需要尽快执行(如分析),请在正文顶部使用
    $.getScript
    (这将是非阻塞请求
      $(function() { 
        $.getScript("script.js", function() {
          for(var i = 0; i < myCallbacks.length;i++) {
            myCallbacks[i]();
          }
        });
      });