关于JavaScript脚本标签:async和defer

Script Tag - async & defer

我有几个关于asyncdefer属性的问题,这些属性用于标记,据我所知,仅在HTML5浏览器中有效。

我的一个站点有两个外部javascript文件,它们目前位于标记的正上方;第一个是来自Google的jquery,第二个是本地外部脚本。

关于现场负载速度

  • 在页面底部的两个脚本中添加async有什么好处吗?

  • 在两个脚本中添加async选项,并将它们放在页面的顶部,这样做有什么好处吗?

  • 这是否意味着它们会随着页面的加载而下载?
  • 我认为这会导致HTML4浏览器的延迟,但它会加快HTML5浏览器的页面加载速度吗?
  • 使用


    HTML5:asyncdefer

    在HTML5中,您可以告诉浏览器何时运行您的javascript代码。有3种可能性:

    1
    2
    3
    4
    5
    <script       src="myscript.js">

    <script async src="myscript.js">

    <script defer src="myscript.js">
  • 如果没有asyncdefer,浏览器将立即运行脚本,然后呈现脚本标记下面的元素。

  • 使用EDCOX1×6(异步),浏览器将继续加载HTML页面并在浏览器加载并同时执行脚本的同时渲染它。

  • 使用EDCOX1×3,浏览器将在页面完成解析时运行脚本。(不需要完成下载所有图像文件)。这很好。


  • asyncdefer脚本都会立即开始下载,而不会暂停解析器,并且都支持可选的onload处理程序,以满足执行依赖于脚本的初始化的常见需要。

    asyncdefer之间的差异集中在脚本执行时。每个async脚本在完成下载后和窗口加载事件之前的第一时间执行。这意味着(并且很可能)async脚本不按它们在页面中出现的顺序执行。另一方面,defer脚本保证按照它们在页面中出现的顺序执行。解析完成后,但在文档的DOMContentLoaded事件之前,执行开始。

    来源和详细信息:这里。


    Faced same kind of problem and now clearly understood how both will works.Hope this reference link will be helpful…

    异步的

    当你添加脚本标记的异步属性时,就会出现狐狸低。

    1
    2
    <script src="myfile1.js" async>
    <script src="myfile2.js" async>
  • Make par-Al-Lel requests to fetch the files.
  • 如果这是永不中断的话,那就走吧。
  • 下载文件时,请切断未分割的视频脚本。
  • 防御

    防御是非常简单的,以一个主要的二极管为准。这是当一个浏览器上有一个脚本的缺陷属性。

    ZZU1

  • Make par-Al-Lel requests to fetch the indi-vid-ual files.
  • 如果这是永不中断的话,那就走吧。
  • 如果脚本文件已经下载,FIN-ISH将离开文档U-MEN。
  • 每一个脚本按顺序排列在文档中。
  • 参考:异步与防御的区别


    它似乎是防御行为和异步行为的浏览器依赖,至少在执行阶段。注,Defer only applies to external scripts.我也有类似的模式

    In IE 11 and below,the order seems to be like this:

    • 可以部分执行,但页面装载
    • 没有(可以在装载页时执行)
    • Defer(executes after page loaded,all defer in order of place in file)

    In edge,webkit,etc,the async attribute seems to be either ignored or placed at the end:

    • Data-Pagespeed-No-Defer(executes before any other scripts,while page is loading)
    • 没有(可以在页面装载时执行)
    • Defer(waits until dom loaded,all defer in order of placement in file)
    • 异步(看上去等待直到多姆负载)

    在下一个浏览器中,数据-pagespeed-no-defer属性运行在任何其他外部脚本之前。这是为剧本而写的,不依赖于剧本。

    注:当你需要一个执行外部脚本的解释命令时,使用定义。这就告诉浏览器执行文件中的所有缺陷脚本顺序。

    ASIDE:外爪哇筛的尺寸在装载时并不重要,但对执行的顺序没有影响。

    如果你担心你的脚本的性能,你可能想考虑采矿,或者简单地用XMLHTPREQUEST装载。


    将在下载文件时下载文件。两者都不会打断帕瑟。

    • 属性将在下载时执行。在完成Dom Parsing之后,属性将被执行。

    • 剧本装载的是asyncDoes's not guarantee any order.当脚本装载时,请将它们所呼唤的次序设定为

    当脚本在任何东西上都不可读时当脚本依赖使用。

    最好的解决办法将被添加到身体的底部,没有问题阻挡或归还。

    更新

    答复是根据评论作出的。