如果我将JavaScript保持在底部或者将JavaScript保存在document.ready中的中,那么它们是一样的吗?
如果我将JavaScript代码保留在底部或将JavaScript代码保存在document.ready
中的 ,那两者是否相同?
我对这两种方法感到困惑, http://api.jquery.com/ready/和http://developer.yahoo.com/performance/rules.html#js_bottom 。
将JavaScript代码置于底部(就在之前)是否有任何好处,即使我将代码保留在内部也是如此。
$(document).ready(function() { // code here });
随着JavaScript的附加
一般情况下,您应该将您的Javascript文件放在HTML文件的底部。
如果您使用“经典” 标记文件,那就更为重要。 大多数浏览器(甚至是现代浏览器)都会在加载和执行javascript时阻止
UI thread
,从而阻止HTML markup
的渲染过程。
这反过来意味着,如果您在页面顶部加载了相当数量的Javascript,则用户将暂停“慢速”加载页面,因为在所有脚本加载后 ,他将看到整个标记执行。
为了使这个问题更严重,大多数浏览器都不会以并行模式下载javascript文件。 如果您有这样的事情:
你的浏览器会
- 加载file1.js
- 执行file1.js
- 加载file2.js
- 执行file2.js
- 加载file3.js
- 执行file3.js
在这样做时, UI thread
和呈现过程都被阻止。
像Chrome
这样的Chrome
最终开始以并行模式加载脚本文件,这使得整个问题不再成为一个问题。
“解决”该问题的另一种方法是使用dynamic script tag insertion
。 这基本上意味着您只能在标记上加载一个javascript文件。 然后,此(加载程序)脚本动态创建
标记并将其插入到标记中。 这是同步的,并且在性能方面更好。
在您能够访问代码方面,它们将加载所有相同的内容。
差异在于感知页面的加载速度。 如果javascript是最后一个,它将不会阻止任何试图下载的CSS,它应始终位于顶部,并且不会阻止任何需要下载的图像。
浏览器只会在HTML中找到它们时询问项目,但它们只有有限数量的下载流(在现代浏览器中约为10),所以如果你对图像/ css和JS做了很多请求,那么就会失去和感知到的页面加载速度/用户体验将会受到影响。
它们与构建DOM树时触发ready
事件不同,而页面末尾的脚本实际上可能在之后执行。
无论哪种方式,它们都是应用程序执行的安全入口点。
雅虎! 开发者网站说,如果你把JavaScript放在页面的底部,它就不会阻止浏览器加载其他资源。 这将使页面的初始加载更快。
jQuery指定了在整个页面加载时加载的函数。
如果您有一个在页面加载时执行的function,无论您是将其包含在还是在页面底部,它都将同时执行。
在决定放置它的位置时,考虑JavaScript在页面上实际执行的操作非常重要。 在大多数情况下,加载和运行JavaScript所花费的时间使得将它放在页面末尾更合乎逻辑。 但是,如果页面呈现本身依赖于Ajax调用或类似,则可能不是这种情况。
这里有关于document.ready()
的主题的一个很好的阅读不适合所有JS。
如果您使用document.ready
, 标记的位置不涉及您的脚本。 放在
之前,似乎JavaScript收费更快,但我不确定。
即使HTML文档底部的脚本,DOM也可能无法完全加载。 脚本上方的所有封闭元素通常都已准备就绪,在极端情况下可能需要DOM就绪事件。