为什么JS脚本通常放在文档的标题中?

时间:2009-10-18 23:45:13

标签: javascript html w3c web-standards standards-compliance

为什么JS脚本通常放在文档的标题中?它是否需要标准,还是只是一个没有特殊原因的惯例?

3 个答案:

答案 0 :(得分:10)

请参阅http://developer.yahoo.com/performance/rules.html#js_bottom

虽然过去的做法经常是将它们放在标题中以便集中脚本和样式(等等),但现在建议将脚本放在底部以提高页面其余部分的加载速度

引用:

  

脚本引起的问题是它们会阻止并行下载。 HTTP / 1.1规范建议浏览器每个主机名并行下载不超过两个组件。如果您从多个主机名提供图像,则可以并行执行两次以上的下载。但是,在下载脚本时,即使在不同的主机名上,浏览器也不会启动任何其他下载。

     

在某些情况下,将脚本移到底部并不容易。例如,如果脚本使用document.write插入页面内容的一部分,则无法在页面中向下移动。可能还存在范围问题。在许多情况下,有办法解决这些问题。

     

经常出现的另一个建议是使用延迟脚本。 DEFER属性指示脚本不包含document.write,并且是浏览器可以继续呈现的线索。不幸的是,Firefox不支持DEFER属性。在Internet Explorer中,脚本可能会延迟,但不是所需的。如果可以延迟脚本,也可以将其移动到页面底部。这将使您的网页加载速度更快。

答案 1 :(得分:3)

  

<script src="url"></script>会   阻止下载其他页面   脚本之前的组件   获取,编译和执行。它是   最好尽快调用脚本   尽可能,以便加载   图像和其他组件不会   被推迟了。

这取决于脚本的功能。如果您的代码包含在onLoad事件中,那么它无关紧要,因为它几乎会立即返回而不会阻塞,否则您应该将它放在适合的位置,因为放置很重要。

至于最后,它确实为用户提供了一些额外的时间来开始查看页面。只问自己一个问题 - 我的网站没有javascript工作吗?如果没有,那么在我看来,它不会影响您放置它的位置因为onLoad代码只会在DOM完全加载时执行(包括像图像这样的二进制内容)。如果您可以在没有javascript的情况下使用它,那么请将其放在最后,以便图像可以加载更快。

另请注意,大多数JS库使用特殊代码来解决onLoad问题,并使用自定义事件,一旦DOM加载并且不等待二进制数据就会被触发。

现在我写了所有这些,我得到了一个我自己的问题。使用说jQuery的

$(document).ready(function () {}); 

并将脚本标记放在页面末尾与使用onLoad事件并将其置于开头相同? 它应该是相同的,因为浏览器会在加载脚本之前加载所有图像,这是列表中的最后一个。如果你知道答案留下评论(我太懒了,现在测试它太晚了)。

答案 2 :(得分:1)

这只是一个惯例。通常建议将脚本放在正文的末尾,以便页面可以在加载之前显示,这总是一个加号。此外,在加载文档或将脚本放入正文之前,不能使用document.body