【发布时间】:2017-07-21 11:43:46
【问题描述】:
曾几何时,<script> 在<head> 或<body> 上有很多激烈的争论。
许多 SO 帖子已经指出 最佳实践 / 经验法则 是将 <script> 放在 <body> 末尾之前,以免阻塞 html 解析器,从而为客户端带来更快的首屏绘制和更快的 DOM 访问,从而获得更好的用户体验。
这一定是重复的╰(‵□′)╯
等等……<script> 现在可以变成deferred,实际上还有一段时间!
旧帖说
延迟脚本可能会导致 JS 依赖问题
不,不会。当 DOM 被解析时,它会立即保留执行顺序。
它不能跨供应商工作
是的,曾经是,但今天几乎所有主要浏览器供应商都支持它:http://caniuse.com/#search=defer,此外,正如 cmets 指出的那样,IE
然而,它提供的好处似乎是显而易见的,至少对我而言,因为它在更早的时间(在开始解析 DOM 之前)并行下载脚本,因此无需稍后请求脚本并缩短所需的时间带来整个页面互动。
简而言之,这个问题类似于:任何不使用的充分理由
<head>
...
<script src='cdn/to/jquery' defer>
<script src='cdn/to/bootstrap' defer>
<script src='script/depends/on/jqueryandbootstrap' defer>
</head>
改用这个:
<body>
...
<script src='cdn/to/jquery'>
<script src='cdn/to/bootstrap'>
<script src='script/depends/on/jqueryandbootstrap'>
</body>
注意:这可能是一个有很多讨论的“古老”话题。然而,随着 Web 技术的快速发展,浏览器供应商与新的 Web 规范更好地保持一致,许多旧的 stackoverflow 答案可能无法保持最新。
【问题讨论】:
-
caniuse 中有一条说明 IE defer 的好理由:p
-
和放在
head的头部没有defer一样 -
我差点忘了这个(
defer) 魔法属性; This is an interesting article I found on Mozilla Hack -
defer是否会消除对 $(document).ready() 的需求?
标签: javascript html deferred-loading external-script