2011-10-13 57 views
42

我即将踏上新的web项目,我打算使用下面的方案把我的JS-脚本在头尾体前:JavaScript in <head>或只是之前</body>?

  1. 的脚本,为的UX的必要页面在头上。正如我已经仔细阅读网页 - 头部中的脚本在页面加载之前加载,因此将对用户体验至关重要的脚本放在那里是有意义的。

  2. 对于页面的设计和UX(Google Analytics脚本等)非必不可少的脚本会在</body>之前。

这是一个明智的做法吗?

另一种方法是将所有脚本放在<head>中,并将延迟属性添加到非必要脚本中 - 但我读过FF的旧版本没有选择延迟属性。

+2

我也想知道这一点。 –

+0

我认为这是一个完全可以接受的方法。我在某个地方看到,“延期”在很多浏览器上都不起作用,但我可能是绝望的错误。 – Bojangles

+1

我想这一切都是关于品味。 我亲自将它们添加到body标签(头部)之前,并在页面内部添加需要的小片段。 – ikromm

回答

27

我想很多开发人员在</body>之前运行javascript,以便在渲染完所有元素之后运行它。

但是,如果您正确组织您的代码,页面上的位置并不重要。

例如,使用jQuery的时候,你可以确保代码不会跑,直到页面和它的元素通过执行以下完全呈现:

$(document).ready(function(){ 
    //Code here 
}); 

然后脚本参考可以放在head标签。


更新 - 应在</body>之前引用脚本标记。这可以防止脚本加载时的渲染阻塞,并且对于站点感知速度更好。

使用此技术时不应使用突兀的JavaScript。

+19

不要忘记,将脚本移动到底部时内容加载速度更快。假设ajax没有被用来加载页面的默认内容。 – daveyfaherty

+7

即使使用DOMReady,位置也是非常重要的。很多开发人员在''之前放置了JavaScript标记,因为所有脚本都是同步加载并执行**。当他们在''时,页面呈现停止下载→解析→执行每个脚本。 – Lapple

+7

(打桩于...)将SCRIPT放在页面底部的主要原因不在于确保DOM已加载(尽管是一个重要原因),更关注的是使页面看起来很有回应性。如果您在页面顶部加载脚本,浏览器会先下载脚本,然后您的内容会一直等到下载完毕 - 这会导致APPEAR页面加载速度变慢,从而导致用户不快。 – kingdango

4

我会说这是完全合理的。正如你所说,只要你不移动基本脚本(例如jQuery,Modernizr等等)从<head>出来,你应该没有问题。

将非必要脚本移动到页面底部应该有助于提高加载速度(即最小化/连接脚本)。

1

将Javascript放在一个单独的文件中,并在HTML的头部添加一个链接。

1

这一切都取决于您所说的“UX必不可少”。例如,我同意modernizr早期出现,但并非所有事情都需要立即加载。如果您试图避免使用无格式文本(FOUT),这是一个很好的理由。同样,如果您的脚本在用户执行任何操作之前会影响页面的外观,您应该尽早加载。

不要忘了,速度是UX的一部分。当用户看不到它所适用的内容时,准备好运行一些jquery交互是没有好处的。在结束开始加载脚本之间的区别仅需几秒钟。如果您首先加载页面,则用户将使用这些秒钟来接入页面,从而允许您不加介入地加载脚本。

如果您将脚本移动到页面底部,那么您的页面加载速度会更快,并且这对目前的页面排名有所帮助。

另外,如果您尝试在引用的元素加载之前运行脚本,某些版本的IE将会抛出错误。

就像埃德说的,你的脚本应该存储在一个单独的文件中,并尽可能少的文件。

12

JavaScript应放置在文档的末尾,以便它不会延迟并行加载页面元素。这然后要求js以特定的方式写入,但它确实提高了页面加载的速度。

此外,理想情况下,您可以在不同的(子)域下托管这样的参考。对jQuery的引用也应该指向Google的CDN。

有关更多信息,请参见http://developer.yahoo.com/performance/rules.html

2

想要在</body>之前放置脚本的原因之一是,如果他们在没有用户交互的情况下操纵DOM,则需要加载DOM才能被操纵。另一种方法是添加一个事件监听器并在页面加载时运行脚本,但是这需要额外的代码,如果你有很多脚本,尤其是那些你自己没有编写的代码,这可能会变得复杂。将它们放在页面的末尾也会加快页面加载速度,但在DOM操作脚本的情况下,您可能会得到一些不那么漂亮的结果。

+0

您需要在答案中的''标签周围加反引号('')。 – naught101