尽管继续采用 script 元素的 async
属性,但仍然有人建议将脚本放置在不带 async 属性的文档底部。如果避免 document.write
,使用异步时是否有任何可能的陷阱?
例如,如果我加载一个包含在 jQuery 的 $(document).ready(...)
中的脚本,在添加异步时是否有可能遇到任何负面影响属性?我可以在所有此类脚本上可靠地指定异步吗?
最佳答案
如果您的脚本依赖于以特定顺序运行,则无法使用异步
。这通常意味着他们相互依赖。
最近发生在我身上的一个例子是使用 Google 的 PrettyPrint 语法突出显示库。您包含该库,然后调用 prettyPrint()
将语法突出显示应用于相关 block 。
<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()
的调用是外部的而不是内联的,那么这在上述情况下是有效的,因为我不认为它适用于内联脚本。
关于javascript - 有什么理由不使用异步脚本元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915819/