何时在加载脚本时使用async vs defer?

时间:2017-06-08 19:15:22

标签: javascript jquery html asynchronous

所以我最近才知道把你的js放在DOM的底部是过时的,我应该再次将它们放在<head>中,并带有“async”和“defer”属性

大。但是,基于优先级,我对应该使用哪种方式感到有点困惑。

所以我有:

  • jquery的
  • jquery插件不会对外观造成直接影响 页
  • 对页面外观有直接影响的jquery插件
  • 我自己的个人脚本,对外观有直接影响 页面,也依赖于jquery

哪个应该异步,哪个应该推迟?

如果我理解了这一切,那些不会对网站外观产生直接影响的应该推迟,而其他一切都会异步。正确?或者我把这些搞混了。

1 个答案:

答案 0 :(得分:10)

这很简单。您应该将[async]用于可以按任何顺序执行的脚本,将[defer]用于必须在解析HTML之后执行的脚本。

例如,如果您的帖子旁边添加了社交分享图标,并且此脚本不依赖于任何其他脚本,则可以同时使用[async][defer] 。但是如果你的脚本需要jQuery,你就不能使用[async],因为如果这样做,可能会发现它在加载jQuery之前被执行并且它会中断。

如果您的所有脚本都需要jQuery,那么您根本不应该使用[async]。对于[defer],它取决于您的脚本是否访问DOM。对于插件而言,它可能并不重要,但您可能需要它来代码。

如果您将脚本包装在$(document).ready();中,则可以将[defer]用于不会立即生效的脚本(例如,需要用户互动)。