关于javascript:任何有理由不使用< script defer>

Any good reason not to use <script defer> TODAY?

从前,在中有许多关于的激烈争论。

许多这样的文章已经指出,最佳实践/经验法则是将放在结束之前,以避免阻塞HTML解析器,从而使第一屏绘制更快,客户端访问DOM更快,从而获得更好的UX。

This must be a duplicate╰(‵□′)╯

等待。。。现在可以是deferred了,实际上有一段时间了!

老帖子说

deferred script may results JS dependency issues

不,不会的。在解析DOM时,它会立即保留执行时的顺序。

It doesn't work cross vendors

是的,它曾经是,但是现在几乎所有主要的浏览器供应商都支持它:http://canius.com/search=defer,而且评论指出,IE<10可能有一些问题。

但是,它提供的好处似乎很明显,至少对我来说,因为它在早期(开始解析DOM之前)并行下载脚本,因此无需稍后请求脚本,并缩短了使整个页面交互所需的时间。

简而言之,这个问题类似于:任何不使用的好理由

1
2
3
4
5
6
<head>
...
<script src='cdn/to/jquery' defer>
<script src='cdn/to/bootstrap' defer>
<script src='script/depends/on/jqueryandbootstrap' defer>
</head>

而是使用:

1
2
3
4
5
6
<body>
...
<script src='cdn/to/jquery'>
<script src='cdn/to/bootstrap'>
<script src='script/depends/on/jqueryandbootstrap'>
</body>

注:这可能是一个"古老"的话题,有很多讨论。然而,随着Web技术的快速发展,浏览器供应商会更好地与新的Web规范保持一致,许多旧的stackoverflow答案可能无法跟上时代的步伐。


是的,但这只是因为您使用的是jquery。

jquery不能与defer一起工作,因为它会在页面交互后立即尝试启动。他们不能很快修复它(我一年前就提出了这个bug),因为将ready行为改为与defer一起工作会破坏许多依赖jquery的ready事件在交互式上触发的组件(即在延迟脚本完成加载之前)。

如果您使用的是更现代的框架(react、angular 2、polymer、vue或其他任何东西),那么就开始使用它——或者甚至进入下一步,在新浏览器中使用