【问题标题】:Can I use <script defer> safely now?我现在可以安全地使用 <script defer> 了吗?
【发布时间】:2013-12-27 12:06:10
【问题描述】:

根据我的阅读,&lt;script&gt; 上的 defer 属性现在是 widely supported,但我从未看到它被使用或提及过。

如果您不需要延迟内联脚本并且不动态添加脚本(which cause problems in IE9- and Safari 4-),似乎您可以可靠地使用它并按指定顺序拥有scripts run right before DOMContentLoadedasync 不会发生这种情况)

这基本上是大多数网站所需要的:在 DOMready 上按顺序运行几个或多个外部脚本。例如:

<script defer src='jquery.js'></script>
<script defer src='jquery.some-plugin.js'></script>
<script defer src='my-scripts.js'></script>

为什么它没有被广泛使用?现在真的可以用了吗?

【问题讨论】:

  • 因为我们大多数人都会在 &lt;/body&gt; 标签之前包含脚本并避免所有这些问题?
  • 这就是我要说的,没有问题,如果你只是将“&lt;/body&gt; 之前的脚本”替换为“&lt;head&gt; 中的defer 脚本”。他们甚至更早开始下载,因此使用defer 有一个优势
  • 它没有被广泛使用,原因与您在第一行中提到的相同:现在得到广泛支持。因为,在此之前,它并没有得到广泛的支持。是的,与在正文结束前开始下载相比,使用defer 进行延迟执行 是个好主意!
  • 我投票决定重新开放,因为这显然可以有一个客观的答案。 caniuse.com的声明可以客观地被证明和证伪,这里的答案也是如此。

标签: javascript deferred-execution


【解决方案1】:

我做了更多的研究,发现defer 的问题不仅限于内联脚本和在 IE9 中动态添加的脚本。 HTML5 Boilerplate GitHub https://github.com/h5bp/lazyweb-requests/issues/42

太可惜了,我觉得他们应该尝试改进 defer 而不是处理可疑的 async(可疑因为它只有在脚本不相互依赖时才有用,这对于我)

【讨论】:

  • 至少有一些 JavaScript 库支持异步加载具有依赖关系的脚本(尽管如果编写脚本时没有考虑到其中一个库,则可能需要一些外部设置/配置以使事情正常工作)。
  • defer 对内联脚本没有任何意义(它的存在甚至是被禁止的),所以这不能被认为是一个“问题”
【解决方案2】:

你问是否:

您可以可靠地使用defer,并让脚本在DOMContentLoaded之前按指定顺序运行

不幸的是,我在任何地方都没有看到任何规范或标准表明必须按顺序执行 defer 脚本,所以我认为您不能在任何浏览器中依赖它。规范只是说defer 脚本必须在 DOM 加载后执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2012-03-24
    • 2020-05-06
    • 2020-06-30
    • 2017-04-27
    • 2022-01-10
    相关资源
    最近更新 更多