将JavaScript / Ajax放在文档中的最佳位置在哪里?

对愚蠢的问题表示歉意,但我需要专家澄清。

在放置Javascript, head$(document).readybody的三个地方中,最好放置一些使用大量$GET函数的ajax?

例如,我使用的是一个名为execute_send()的JavaScript函数,但我不确定它放在哪里的最佳位置。 以下是错误:

Problem at line 67 character 22: 'execute_send' was used before it was defined. function execute_send() {

此外,展示位置如何影响页面加载时间?

一般来说,除非出于某种原因你需要在其他地方使用它,否则将所有的JS放在最后。 浏览器在解析你的JS之前不会继续,所以最好先让页面加载。 请参阅http://developer.yahoo.com/performance/rules.html

作为一个例子,你可能真的想把JS放在头脑中:你可能有一些你希望在页面呈现之前运行的A / B测试代码 – 在这种情况下,代码应该放在首位,因为你真的希望它尽快运行。

正如@Thom Blake所说,一般来说最好的地方是的底部(+1) – 但我会稍微扩展一下:

这样做的原因是,当浏览器加载页面时,它必须在遇到JavaScript时停止加载和解析JavaScript。 因此,如果您在拥有所有脚本,那么加载中的所有内容将会有延迟

请注意,这是加载延迟 – 与脚本的实际执行分开。 像$(document).ready()这样的东西处理脚本执行的时间,而不是处理它的时间。

通常,所有这些都很重要,因为您希望网页尽可能地响应,因此JavaScript的最佳实践列表通常是这样的:

  1. 将所有脚本放在的底部,以便不延迟加载非JS资源(如图像)。

  2. 将您的脚本合并到一个文件中,这样服务器就可以减少对资源的请求(您会看到这称为“最小化HTTP请求”)

  3. 缩小脚本,减少总大小,从而加快加载时间

  4. $(document).ready() (或页面上使用的JS库的等效方法$(document).ready()放置任何依赖于DOM的代码(例如,单击处理程序,HTML操作等)。

同一主题: 什么是优点和缺点 – 推杆-javascript-in-head-and-put-the-body-body

在过去,我经历了一些jquery问题,因为初始化时它不是’加载器’。这就是我们决定将它插入

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

对于其余的javascripts,都在结束标记之前。

解释’为什么页面会加载更快’:它不会。

浏览器是单线程的,因此可以理解的是,当脚本执行时,浏览器无法启动其他下载。 但是没有理由在脚本下载浏览器时无法开始下载其他资源。 这正是新的浏览器,包括Internet Explorer 8,Safari 4和Chrome 2所做的。

如果您的标签内的资源将加载/显示顺序,则可以看出差异。 当浏览器加载 ,必须先加载完整的文件,然后浏览器才能获取另一个ressource。 所以,这是一种幻觉,因为浏览器会在“javascripts”之前加载/显示更多“可见”内容。

想象一下整个事情:firebug> Net(tab)

如前所述, $(document).ready不是一个地方。 (对于jQuery, $(document).ready只是确保在执行任何脚本之前DOM已完全加载(准备好操作)。)您可以将JavaScript放在

但是,将所有JavaScript包含和JavaScripts放在部分的底部适合加载性能。 脚本下方的所有内容都会阻止“渐进式渲染”和“并行下载”。 如果你的脚本是页面上的最后一件事,你就不会阻止任何事情。

本文将更深入地解释它。

例: