将JavaScript / Ajax放在文档中的最佳位置在哪里?
对愚蠢的问题表示歉意,但我需要专家澄清。
在放置Javascript, head
, $(document).ready
或body
的三个地方中,最好放置一些使用大量$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的最佳实践列表通常是这样的:
-
将所有脚本放在
的底部,以便不延迟加载非JS资源(如图像)。
-
将您的脚本合并到一个文件中,这样服务器就可以减少对资源的请求(您会看到这称为“最小化HTTP请求”)
-
缩小脚本,减少总大小,从而加快加载时间
-
在
$(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放在部分的底部最适合加载性能。 脚本下方的所有内容都会阻止“渐进式渲染”和“并行下载”。 如果你的脚本是页面上的最后一件事,你就不会阻止任何事情。
本文将更深入地解释它。
例: