2017-03-01 64 views
11

曾几何时,在<head><body><script>有许多激烈的辩论。不使用<script defer>今天有什么好的理由?

许多SO帖子已经指出拇指的最佳实践/规则是把<script><body>年底之前不会阻止HTML解析器,导致更快的第一个屏幕漆和客户更快的访问DOM,从而提供更好的用户体验。

这必须是一个duplicate╰(`□')╯

稍候... <script>可以deferred现在,实际上是相当长一段时间!

老帖子说

推迟脚本可能会导致JS依赖问题

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

它不工作,跨厂商

是的,它曾经是,但今天它几乎被所有主要的浏览器厂商的支持:http://caniuse.com/#search=defer,除了可能有一些问题,IE < 10的评论指出。

然而,它提供的好处是显而易见的,至少对我来说,因为它下载并行脚本在较早的时间(之前开始解析DOM),因此没有必要随后请求脚本,并缩短所花费的时间带来整个页面互动

短,这个问题是相似的:

<body> 
... 
<script src='cdn/to/jquery'> 
<script src='cdn/to/bootstrap'> 
<script src='script/depends/on/jqueryandbootstrap'> 
</body> 

注:这可能是一个“古老”话题的任何充分的理由不能不是使用此使用

<head> 
... 
<script src='cdn/to/jquery' defer> 
<script src='cdn/to/bootstrap' defer> 
<script src='script/depends/on/jqueryandbootstrap' defer> 
</head> 

有很多讨论。然而,随着网络技术的快速发展,浏览器厂商与新的网络规格更好地协调一致,许多旧的计算器答案可能无法保持最新​​。

+4

caniuse中有一个说明IE <10可能被破坏 - 在我看来,这是现在开始使用'defer'的一个很好的理由:p –

+4

[这里有一些很好的阅读。](http://www.growingwiththeweb .com/2014/02/async-vs-defer-attributes.html) – Pointy

+0

@Pointy我已经看到了,这是一个很好的可视化,除了我认为'async'和'defer'应该占用更少的时间。 – Xlee

回答

1

是的,但只是因为你使用的是jQuery。

jQuery doesn't work with defer因为它试图在页面变为交互式时触发。他们不能很快修复它(我在一年前提出了这个错误),因为改变准备好的行为来与defer一起工作将会破坏很多依赖jQuery的ready事件触发的组件(即在延迟脚本完成加载之前) )。

如果您使用的是更现代化的框架(React,Angular 2,Polymer,Vue或其他任何东西),那就去做吧 - 甚至可以进入下一步,在新浏览器中使用<script type=module,捆绑在IE的<script nomodule defer...中。

相关问题