应该JQuery代码在页眉或页脚?

哪里是最好的地方放JQuery的代码(或单独的JQuery文件)? 如果我把它放在页脚中,页面加载速度会更快吗?

所有脚本都应该最后加载

在几乎所有情况下,最好将所有脚本引用放在页面的最后,放在</body>之前。

如果由于模板问题以及其他原因而无法这样做,请使用defer属性修饰脚本标记,以便浏览器知道在下载HTML后下载脚本:

 <script src="my.js" type="text/javascript" defer="defer"></script> 

边缘情况

但是,有一些边缘情况,您可能会在页面加载过程中遇到页面闪烁或其他工件,通常可以通过简单地将您的jQuery脚本引用放在没有 defer属性的<head>标记中解决。 这些情况包括jQuery UI和其他插件(如jCarousel或Treeview),它们将DOM作为其function的一部分进行修改。


进一步的警告

有一些库必须在DOM或CSS之前加载,如polyfills。 Modernizr是一个这样的库, 必须放在头标签 。

把脚本放在底部

脚本造成的问题是阻止并行下载。 HTTP / 1.1规范build议浏览器每个主机名并行下载至less两个组件。 如果您从多个主机名提供图像,则可以同时进行两个以上的下载。 然而,当脚本正在下载时,浏览器将不会启动任何其他下载,即使在不同的主机名上。 在某些情况下,将脚本移动到底部并不容易。 例如,如果脚本使用document.write插入页面内容的一部分,则不能在页面中移动较小的内容。 也可能有范围问题。 在许多情况下,有办法解决这些情况。

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

编辑:从3.6版本开始,Firefox不支持DEFER属性。

资料来源:

当然只能通过CDN加载头部的jQuery本身。

为什么? 在某些情况下,您可能会包含一个带有embedded式jQuery相关代码的部分模板(例如,ajaxlogin表单代码段) 如果jQuery是在页面底部加载,你会得到一个“$未定义”的错误,很好。

当然,有很多方法可以解决这个问题(比如不embedded任何JS并附加到底层的js包),但是为什么失去了懒惰加载的js的自由,能够在任何地方放置jQuery相关的代码呢? 只要依赖关系(如jQuery被加载)得到满足,JavaScript引擎就不关心代码在DOM中的位置。

对于你的共同的/共享的js文件,是的,把它们放在</body>之前,但是对于例外情况,它真的只是在应用程序维护方面明智的把jQuery依赖的代码片段或文件引用放在那里, 这样做。

没有性能打击加载jQuery的头部; 在这个星球上的浏览器还没有在caching中的jQuery CDN文件?

关于什么都不用说,坚持jQuery的头,让你的js自由统治。

Nimbuz对这个问题提供了一个非常好的解释,但是我认为最终的答案取决于你的页面:对于用户来说,更早的脚本或者图像更重要的是什么?

有些页面在没有图像的情况下是没有意义的,但只有轻微的,非必要的脚本。 在这种情况下,将脚本放在底部是很有意义的,这样用户可以更快地看到图像,并开始理解页面。 其他页面依靠脚本来工作。 在这种情况下,最好有一个没有图像的工作页面,而不是带有图像的非工作页面,因此将脚本放在最前面是有意义的。

另一件要考虑的事情是,脚本通常比图片小。 当然,这是一个泛化,你必须看看它是否适用于你的页面。 如果是这样的话,对我而言,首先是作为一个经验法则(也就是说,除非有充分的理由不这样做),因为它们不会像图像一样拖延图像,从而拖延脚本。 最后,将脚本放在最上面会容易得多,因为当你需要使用脚本时,不用担心它们是否被加载。

总之,我倾向于默认情况下将脚本放在顶部,只考虑在页面完成之后将脚本移动到底部是否值得。 这是一个优化 – 我不想过早做。

大多数jQuery代码都是在文档准备好的情况下执行的,直到页面结束才发生。 此外,页面渲染可以通过JavaScriptparsing/执行延迟,所以最好的做法是把所有的JavaScript放在页面底部。

标准的做法是将所有的脚本放在页面的底部,但是我使用ASP.NET MVC和一些jQuery插件,我发现如果我把我的jQuery脚本放在<head>部分的母版页。

在我的情况下,如果脚本位于页面的底部,则页面加载时会出现工件。 我正在使用jQuery TreeView插件,如果脚本在开始时没有加载,树会呈现没有必要的CSS类强加在插件上。 所以,当页面第一次加载的时候,你会看到这个有趣的东西,接下来是TreeView的正确渲染。 非常不好看。 把jQuery插件放在母版页的<head>部分就可以避免这个问题。

尽pipe几乎所有的网站仍然把Jquery和其他的JavaScript放在头上:D,甚至检查stackoverflow.com。

我也build议你在身体的结束标签之前穿上。 放置在任何地方后,您可以检查加载时间。 脚本标记将暂停您的网页进一步加载。

并将脚注放在JavaScript后,你可能会得到不寻常的看起来你的网页,直到它加载的JavaScript,所以放置CSS标题部分。

根据这个链接 , </body>是最好的地方,这是有道理的。

最好的做法是自己testing。

对我来说,jQuery有点特别。 也许是一个例外的规范。 还有很多其他的脚本依赖于它,所以它的加载非常重要,所以后面的其他脚本将按照预期工作。 正如其他人指出,即使这个页面加载jQuery的头部分。

Interesting Posts