【发布时间】:2012-09-07 03:12:54
【问题描述】:
我总是将脚本标签放在页面底部,因为在 HTML/CSS 和文本等内容完成加载后加载脚本是一种很好的做法。我刚刚发现了 defer 属性,它基本上做同样的事情,即它等到页面完成加载,然后再获取和执行脚本。
那么如果使用 defer 属性,是否有必要将 script 标签物理放置在页面底部而不是 head 标签内?
我发现将脚本标签保留在 head 部分中会更好地提高可读性。
<script src="script.js" defer="defer"></script>
或
<script defer="defer">
// do something
</script>
【问题讨论】:
-
您的第二个示例实际上不会被推迟。
defer仅适用于外部脚本。 -
不会把脚本放在末尾 将其设置为延迟是多余的吗?至于到底要不要用
defer,难道要忽略Opera的市场份额吗? (显然 Opera 也不支持 html5async属性。)您可能需要考虑类似 yepnope.js 的东西。 -
推论是,如果您需要使用一些文字脚本,那么延迟的外部脚本和文字脚本的执行顺序将突然变得非常重要,以便在读取 HTML 源时确定。你需要做的是确保所有脚本(除了 Modernizr 和其他应该提前加载的脚本)都是从外部文件加载的,并将它们声明为延迟。与确保脚本包含在文件末尾相比,这似乎并没有那么麻烦。当然它更干净,但是为什么有人会选择其他选项是可以理解的。
-
@millimoose 实际上,它在 Gecko 1.9.1 中也适用于内部脚本-
-
从本质上讲,我的观点是,如果您将未延迟的脚本保留在页面底部,您就知道它们何时执行,您知道它们将按什么顺序执行,并且您知道什么这将对性能产生影响。如果您在
<head>中使用延迟脚本,则您依赖于特定浏览器的实现细节/对 HTML5 的遵守。
标签: javascript html