我知道建议将Javascript放在页面的底部,但是如果我使用jQuery,这不会破坏它在加载DOM时运行的目的吗?
例如,如果我有一个下拉菜单,则在页面的所有其余部分均已加载之前,不会显示下拉菜单。我还尝试着在渐进增强的基础上进行开发,因此我可能会使用jQuery而不是CSS隐藏元素(以便非JS用户可以看到它们)。
也许有一种快乐的媒介吗?
我知道建议将Javascript放在页面的底部,但是如果我使用jQuery,这不会破坏它在加载DOM时运行的目的吗?
例如,如果我有一个下拉菜单,则在页面的所有其余部分均已加载之前,不会显示下拉菜单。我还尝试着在渐进增强的基础上进行开发,因此我可能会使用jQuery而不是CSS隐藏元素(以便非JS用户可以看到它们)。
也许有一种快乐的媒介吗?
Answers:
在HTML加载完成之前,脚本没有实际使用-在HTML加载之前,脚本无法更改DOM。document.ready
等待DOM加载。因此,它没有必要保留样式表之类的重要内容。
将脚本放在页面底部(</body>
标记之前),以便尽快将HTML和CSS提供给用户。浏览器将能够更快地呈现页面,然后可以加载脚本,而不是在等待脚本下载时留出空白页面供用户凝视。
当浏览器逐步呈现页面时,如果它命中了脚本标签(即外部Javascript文件),则所有内容都会停止。脚本具有使用权-下载脚本时,浏览器将不会开始任何其他下载。即图像和样式表以及任何其他并行下载将被阻止,即使在不同的主机名上也是如此。
将脚本放在页面底部的缺点是,因为页面将在脚本初始化之前呈现,特别是快速单击器将能够在Javascript准备就绪之前与您的网站进行交互。
注意:样式表正好相反-页面底部附近的样式表会阻止渐进式渲染,直到所有样式表均已下载并将其移动到文档中才能HEAD
消除此问题。
为了在不让用户等待的情况下加载javascript,有一个巧妙的技巧,您可以<script/>
使用DOM createElement()
方法创建一个元素并将其添加到页面中,紧接在结束</body>
标记之前:
var oScript = document.createElement("script");
oScript.src = "/path/to/my.js";
document.body.appendChild(oScript);
在将新<script/>
元素实际添加到页面之前,浏览器不会开始下载js脚本。下载完成后,浏览器将解释其中包含的Javascript代码。