是否有任何理由不使用异步脚本元素?

时间:2014-01-04 01:48:24

标签: javascript html asynchronous

尽管继续采用了脚本元素的async属性,但仍然建议将脚本放在文档的底部而不使用async属性。如果避免document.write,使用异步时是否存在任何可能的陷阱?

例如,如果我加载一个我在jQuery的$(document).ready(...)中包装的脚本,那么在添加async属性时是否有可能遇到任何负面影响?我可以在所有这些脚本上可靠地指定异步吗?

1 个答案:

答案 0 :(得分:2)

如果您的脚本依赖于按特定顺序运行,则无法使用async。这通常意味着他们互相依赖。

最近发生在我身上的一个例子就是使用Google的prettyprint语法高亮库。您包含该库,然后调用prettyPrint()以将语法突出显示应用于相关块。

<script src='http://cdnjs.cloudflare.com/ajax/libs/prettify/r298/prettify.js' type='text/javascript'></script>
<script type='text/javascript'>prettyPrint();</script>

因此,如果您的所有脚本都包含在$(document).ready中,那么他们很可能完全可以使用async。您应该问的问题是,您是否可以合并所有文件,这样您只需要提出一个请求。


defer属性与async类似,但在解析HTML之前一直等待,然后按照它们在HTML文件中出现的顺序运行脚本。这可以在上述情况下工作,只要调用prettyPrint()是外部而不是内联,因为我认为它不适用于内联脚本。