$(文件)。就绪(函数(){}); vs页面底部的脚本

在页面底部写脚本和写脚本有什么区别/优点/缺点?

$(document).ready(function(){}); 

DOM本身很less,无论哪种方式,DOM将准备好让您操作(直到我从Google读取这个内容之前,我都很紧张)。 如果你使用页面技巧的结尾,你的代码可能会被稍微调用一点,但没有什么关系。 但更重要的是,这个select涉及到你的JavaScript链接到页面的位置。

如果在head包含script标记并依赖ready ,则浏览器在向用户显示任何内容之前遇到script标记。 在正常情况下,浏览器会停下来,然后下载脚本,启动JavaScript解释器,并将脚本交给它,然后等待解释器处理脚本(然后jQuery以各种方式监视DOM准备就绪)。 (我说“在正常的事情过程中”,因为一些浏览器支持script标签的asyncdefer属性。)

如果您将script标记包含在body元素的末尾,则浏览器将不会执行所有这些操作,直到您的页面大部分已经显示给用户。 这可以提高页面的感知加载时间。

为了获得最佳的感知加载时间,请将脚本放在页面底部。 (这也是雅虎人的指导原则 。)如果你打算这么做的话,那就没有必要使用ready ,当然如果你喜欢的话也可以。

但是,有一个价格:你需要确保用户可以看到的东西准备好被交互。 通过将页面大量显示之后将下载时间移至页面,可以增加用户在加载脚本之前开始与页面交互的可能性。 这是把script标签放在最后的反面理由之一。 通常这不是一个问题,但是你必须看看你的页面,看看是否是,如果是的话,你想如何处理它。 (你可以在head设置一个小的内联 script元素来设置一个文档范围的事件处理程序来应对这种情况,这样可以缩短加载时间,但如果他们尝试过早地做某事,你可以告诉他们或者更好的是排列他们想做的事情,当你的脚本已经准备就绪的时候。)

你的页面加载速度会比较慢,通过在整个DOM中分散$(document).ready()脚本(而不是所有的末尾),因为它需要首先同步加载jQuery。

$ = jQuery 。 所以,如果不先加载jQuery,就不能在脚本中使用$ 。 这种方法迫使你在页面的开始附近加载jQuery,这将暂停你的页面加载,直到完全下载jQuery。

你不能async加载jQuery,因为在许多情况下, $(document).ready()脚本将在jQuery完全asynchronous加载并导致错误之前尝试执行,因为$还没有被定义。

这就是说,有一种方法来欺骗这个系统。 基本上设置$等于一个将$(document).ready()函数推入队列/数组的函数。 然后在页面的底部,加载jQuery,然后遍历队列并执行每个$(document).ready() 。 这允许您将jQuery推迟到页面底部,但在DOM中仍然使用$以上的值。 我个人还没有testing过它的效果如何,但理论是正确的。 这个想法已经有一段时间了,但是我很less看到它的实现。 但是这似乎是一个好主意:

http://samsaffron.com/archive/2012/02/17/stop-paying-your-jquery-tax