尽管继续采用了脚本元素的async
属性,但仍然建议将脚本放在文档的底部而不使用async属性。如果避免document.write
,使用异步时是否存在任何可能的陷阱?
例如,如果我加载一个我在jQuery的$(document).ready(...)
中包装的脚本,那么在添加async属性时是否有可能遇到任何负面影响?我可以在所有这些脚本上可靠地指定异步吗?
答案 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()
是外部而不是内联,因为我认为它不适用于内联脚本。