JavaScript中<head>还是之前</ body>?

我即将开始一个新的Web项目,并计划使用以下scheme将我的JS脚本放在头部和尾部之前:

  1. 页面用户体验必不可less的脚本是头等大事。 正如我已经仔细阅读网页 – 头部的脚本在页面加载之前被加载,所以在那里放置对用户体验至关重要的脚本是有意义的。

  2. 对于页面的devise和UX(Google Analytics(分析)脚本等)而言不重要的脚本会放在</body>

这是一个明智的做法吗?

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

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

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

例如,使用jQuery时,可以确保代码不会运行,直到页面及其元素完全呈现,方法如下:

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

然后脚本引用可以放在head标签中。


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

使用这种技术时,不应该使用突兀的JavaScript。

Javascript应该放在文档的末尾,这样它不会延迟并行加载页面元素。 这就要求js是以特定的方式编写的,但它确实提高了页面加载的速度。

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

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

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

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

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

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

这一切都取决于你所说的“UX必不可less”。 我同意modernizr早就出现了,但并不是所有的东西都需要立即加载。 如果你想避免一个无风格的文本(FOUT),这是一个很好的理由。 同样的,如果你的脚本在用户做任何事情之前都会影响页面的外观,你应该尽早加载。

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

如果将脚本移动到页面底部,页面加载速度会更快,而这些对日常的页面排名有所帮助。

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

就像Ed说的那样,你的脚本应该存储在一个单独的文件中,并尽可能地保存在尽可能less的文件中。