我应该在哪里声明我的页面中使用的JavaScript文件?在<head> </ head>或</ body>附近?

Tig*_*ger 38 html javascript

我正在阅读一个教程,作者提到要在HTML中的结束body标记(</body>)附近包含Javascript文件.

我想知道我不应该在head部分中声明/定义JavaScript包含哪些类型的功能?对我来说,在结束body标记附近包含像Google Analytics这样的JavaScript是有道理的.在结束body标记附近定义JavaScript包含时应该注意哪些地方?

cle*_*tus 39

通常会争辩说,出于速度目的,您应该将脚本标记放在文档的末尾(在关闭正文标记之前).虽然这会导致最快的页面加载,但它有一些严重的缺点.

首先,网页开发的一个常见习惯是将头文件,页脚文件和中间内容放在一起.为了将不必要的Javascript保持在最低限度,您通常希望将代码段放在单独的页面中.

例如,如果在文档的末尾包含jquery,则必须之后执行 jquery代码片段(如文档准备工作).从发展的角度来看,这可能很尴尬.

其次,根据我的经验,由于页面加载速度较快,您最终可能会注意到某些效果正在应用,因为页面在应用时已经加载.

例如,如果您将一个表放在文档中,并且在正文关闭标记之前放置:

$(function() {
  $("tr:nth-child(odd)").addClass("odd");
});
Run Code Online (Sandbox Code Playgroud)

通过适当的样式,应用的效果通常是可见的.我个人认为这可能会导致糟糕的用户体验.我常常想你最好有页面加载速度慢(通过把脚本在顶部)如果你没有得到令人不安的视觉效果.

我通常提倡有效的缓存策略,因此您只需在更改时下载Javascript文件,如在PHP中使用Supercharging Javascript(但原则适用于任何语言,而不仅仅是PHP),并且仍然将脚本放在顶部.它更方便.


ska*_*man 12

雅虎YSlow的工具有建议在此:

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

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

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

  • Qute可能,虽然我不推荐它.使用听众仍然会更安全,并保证工作. (4认同)
  • 实际上,可能会在本月晚些时候发布的Firefox 3.5支持@defer.请参阅https://developer.mozilla.org/En/HTML/Element/Script (2认同)

Bry*_*isi 12

通过将它们放入<head/>您强制浏览器下载文件,然后才能呈现页面.这导致感知的加载时间减慢.

通过将它们放在页脚中,就在关闭正文标记之前,浏览器将不会加载它们,直到它到达解析HTML的那一点.这意味着脚本将在页面加载过程中稍后运行,但不会阻止资产下载和呈现过程.

最有效的取决于您以及您如何开发代码.