什么是优点和缺点:把JavaScript放在头上,并放在身体closures之前

大多数的JavaScript和网页开发的书籍/文章都说,你必须把CSS标签和javascript放在页面底部。

但是当我打开这个着名的网站的html源码,比如这个stackoverflow,我发现他们把一些js文件放在head标签中。

这两种方法的优点和缺点是什么?何时使用?

为同样的问题find另一个问题: 我应该在哪里声明我的页面中使用的JavaScript文件? 在<head> </ head>或附近</ body>?

从雅虎加快您的网站的最佳实践 :

脚本造成的问题是阻止并行下载。 HTTP / 1.1规范build议浏览器每个主机名并行下载至less两个组件。 如果您从多个主机名提供图像,则可以同时进行两个以上的下载。 然而,当脚本正在下载时,浏览器将不会启动任何其他下载,即使在不同的主机名上。

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

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

因此,一般来说,把它们放在最底部是可取的。 但是,这并不总是可能的,反正也没有太大的区别。

正如其他人所说的,当你把JavaScript放在头部时,它会延迟页面的渲染,直到脚本加载完成,这意味着页面加载时间可能会更长 – 尤其是如果你正在下载大型的脚本文件。

如果将脚本标记移动到页面的末尾,则将确保浏览器在脚本标记之前下载图像和样式表,并且在脚本开始运行之前页面可能会呈现。 这也意味着,如果您依赖于脚本中的某些function,则只有在用户看到该页面之后才能使用该function。

如果您添加样式或元素(例如,用某种forms的更丰富的编辑器切换文本字段),则用户将看到闪烁。

如果您将单击事件添加到元素,则在元素本身可见之后,它们将不可点击。

有时这些问题需要你把你的脚本放在首位,其他时候你可以把它们粘在底部。

恕我直言(完全反对YSlow和很多聪明的人)你应该保持你的脚本在头标签,只是依靠他们大部分时间被caching。

一般而言,您应该将脚本引用放置在页面的底部。 脚本不仅需要被下载,还必须在块被释放之前被评估和执行,并且页面继续呈现过程。 像Modernizr这样的东西应该放在最前面,因为它可以做一些function检测以及可能需要的HTML5垫片。

您想尝试将脚本放在页面底部的另一个原因是单点故障或SPOF。 这是脚本调用超时或由于其他原因阻塞页面执行的地方。 这可能会发生在第三方广告库,等等

是的,您可能需要考虑如何devise您的应用程序,但我发现它很快就会变得非常自然。 在过去的四年中,我已经build立了数以百计的networking应用程序,底部的脚本我可以分辨出来。 我可能是500毫秒可能是5000毫秒,但一切都很重要。

在页面加载之前,头部的任何javascript都将被评估,这意味着页面感觉加载需要更长的时间。 如果所有的javascript都在最后,让事件正常工作会有些困难,但是jQuery几乎可以为你解决这个问题。

这真的取决于你的网站。 如果您正在访问和调用正文中的JavaScript函数,则必须在标题中引用它,以便加载。 否则,如果您只打算在整个文档加载时调用JavaScript,那么将JavaScript放在主体的末尾是明智的。 通过把.JS文件放在最后加载整个页面,然后抓取.JS文件。 通过这种方式,用户将能够快速查看页面,并且在他/她熟悉该页面时已经下载了.JS文件。