我的朋友阅读了一篇文章,其中提到将所有JavaScript文件移动到结束正文标记(</body>
)的末尾,将提高网页的性能。
我已将所有JS文件移到最后,除了JQuery和将文件附加到页面上的元素的JS文件,如下所示;
$(document).ready(function(){
//submit data
$("#create_video").click(function(){ //... });
});
但他说要将jQuery库文件移到body标签的末尾。
我认为这不可能,因为我使用jQuery选择器将许多事件附加到加载的页面元素,并且要使用jQuery选择器,首先必须加载jQuery库。
是否可以在关闭body标签(</body>
)之前将JQuery库文件移动到页面末尾?
由于
答案 0 :(得分:24)
将所有js包含移到页面底部是标准做法。这是因为当浏览器加载脚本时,它不会产生新的线程来执行此操作,因此基本上浏览器将等到它加载脚本后才进入下一行。
这对您的用户意味着他们会看到一个空白屏幕。让他们看到完整的(ish)页面会好得多,因为它看起来并没有停滞不前。
答案 1 :(得分:16)
$(document).ready
函数表示在DOM完成实例化之前不会运行 - 所以只要首先加载JQuery库,就可以将它移动到body之后。非常规和一些假设可能不再正确,但没关系。
答案 2 :(得分:13)
请注意,在对$(...)
函数的任何调用之前,必须加载jQuery JavaScript文件。
答案 3 :(得分:12)
使用“Dom Ready Queue”收集加载jQuery并准备好DOM后要执行的函数。
示例:
<html>
<head>
<script type="text/javascript">
var domReadyQueue = [];
</script>
</head>
<body>
...
<div class="foo"></div>
<script type="text/javascript">
domReadyQueue.push(function($){
$('.foo').doSomething();
})
</script>
...
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript">
jQuery(function(){
while (domReadyQueue.length) {
domReadyQueue.shift()(jQuery);
}
});
</script>
</body>
</html>
答案 4 :(得分:3)
问:为什么我经常看到JavaScript 在结束前书面/包括 (x)HTML文档中的body元素?
A - 无法访问DOM元素 通过JavaScript直到浏览器 将HTML元素加载到DOM中。 将JavaScript放在最后 (x)HTML文件(截止日期前) 身体元素),你会确保 该脚本一旦被调用 DOM已构建/加载并准备就绪 操纵。这样做的一个优点 方法是JavaScript代码 在DOM之后立即执行 建造,可能在之前 onload事件会触发。
JavaScript初学者被绊倒了 这通过放置代码不断 操纵标题中的DOM (x)HTML文档的元素。这个 由于DOM有错误导致错误 尚未建成,因此是 JavaScript尚无法访问 遍历/操纵DOM。
答案 5 :(得分:3)
文章要求您将脚本移到底部的原因是允许首先下载其他工件。 (css&amp; images,这将加快明显的渲染时间)
这是因为HTTP 1.1建议每个主机名只下载2个项目。你肯定希望你的css文件是下载的第一个文件之一,而不是javascript,这可能会使网站看起来渲染得更慢(仅仅是因为浏览器还没有获得css文件,并且不确定应该怎么做html)
但是如果您使用了google to host your jQuery,则可以并行下载,并且无理由将其移至页面底部。
或者,您可以设置第二个主机名来托管静态内容(例如css / scripts / images)。
但谷歌已经为你完成了艰苦的工作,所以如果它适合的话,使用它是有道理的。 : - )
答案 6 :(得分:2)
使用不显眼的javascript(将事件侦听器添加到元素而不是onclik =“...”等)。 将所有.js文件放在body标签的底部,首先放置主库(在本例中为jQuery),一切都会好的。您可以使用bundle fu
之类的捆绑包您将看到加载页面的巨大性能提升。