我知道建议将Javascript放在页面底部,但是如果我使用jQuery,这是否会破坏它在加载DOM时运行的目的?

如果我有一个例如,在下拉菜单中,下拉菜单只有在页面的所有其余部分都加载完毕后才会显示。我还尝试着在渐进增强的基础上进行开发,因此我可能使用jQuery而不是CSS隐藏了元素(以便非JS用户可以看到它们)。 ?

评论

我遇到了相反的问题。我有一个脚本来创建和定位侧边栏,但是不幸的是,在运行脚本之前已渲染了页面,由于在新位置重新绘制了页面元素,因此造成了难看的混乱。是否可以在我的脚本完成之前阻止渲染,或者在第一次渲染之前运行我的大小和位置的东西?

这个问题难道不属于StackOverflow吗?

#1 楼

在运行任何JavaScript之前,Document.ready等待DOM加载(http://www.learningjquery.com/2006/09/introducing-document-ready)。

将其放在底部,意味着如果您的JS出现问题或该人的连接速度较慢,则页面的其余部分仍将首先加载,并且不会“挂起”。

当所有已加载,无论是开始还是结束。

#2 楼

在底部放置javascript意味着其他页面内容(尤其是文本)会在javascript之前加载,因此如果用户连接速度较慢,则用户不必等待JS加载。

这不会影响document.ready ,即在浏览器完成页面的DOM准备时调用。无论哪种方式,一切仍然需要首先加载。

#3 楼

在HTML加载完成之前,脚本没有实际使用-在HTML加载之前,脚本无法更改DOM。 document.ready等待DOM加载。因此,它没有必要保留样式表之类的重要内容。

将脚本放在页面底部(在</body>标记之前)以使您的HTML和CSS尽快获得用户您可以。浏览器将能够更快地呈现页面,然后可以加载脚本,而不是在等待脚本下载时留出空白页面供用户凝视。

逐步呈现页面,如果页面命中了脚本标签(即外部Javascript文件),则一切停止。脚本拥有权利-在下载脚本时,浏览器将不会开始其他任何下载。即图像和样式表以及任何其他并行下载,即使在不同的主机名上也将被阻止。

将脚本置于页面底部的缺点是,因为页面将在脚本初始化之前呈现,特别是快速点击器将能够在Javascript准备就绪之前与您的网站进行交互。

注意:样式表正好相反-页面底部附近的样式表会阻止渐进式渲染,直到所有样式表均已下载并将它们移至文档HEAD可以消除此问题。


有一个巧妙的技巧,可以在不使用户等待的情况下加载javascript,可以使用DOM <script/>方法创建一个createElement()元素,并将其添加到页面中紧靠</body>标记之前的位置:

var oScript = document.createElement("script");
oScript.src = "/path/to/my.js";
document.body.appendChild(oScript);


在新的<script/>元素实际添加到页面之前,浏览器不会开始下载js脚本。 。下载完成后,浏览器将解释其中包含的Javascript代码。

评论


并非完全正确。脚本可以在所有HTML加载之前更改DOM。实际上,这就是脚本被阻止的原因,因为它们可以更改页面。也就是说,在许多情况下,开发人员不需要在加载DOM之前添加其“行为”脚本。

–scunliffe
2010年7月17日在1:53

#4 楼

是。如果将脚本放在底部,则不再需要doc.readyDOMContentLoaded事件)-无论如何,所有先前的DOM都加载后,您的脚本将被执行。

因为最后的脚本提高了性能(HTML解析)并且脚本不会阻止CSS和图像的加载)我建议将脚本放在底部,而不要使用doc.ready