提问人:nickf 提问时间:10/13/2008 最后编辑:Sebastian Simonnickf 更新时间:6/5/2020 访问量:144163
在 HTML 文件中放置 JavaScript 的什么位置?
Where to place JavaScript in an HTML file?
问:
假设我有一个相当大的 JavaScript 文件,压缩到大约 100kb 左右。通过文件,我的意思是它是一个外部文件,可以通过 链接,而不是粘贴到 HTML 本身中。<script src="...">
把它放在 HTML 中的最佳位置在哪里?
<html>
<head>
<!-- here? -->
<link rel="stylesheet" href="stylez.css" type="text/css" />
<!-- here? -->
</head>
<body>
<!-- here? -->
<p>All the page content ...</p>
<!-- or here? -->
</body>
</html>
每个选项之间会有什么功能差异吗?
答:
最好的地方就在你需要它之前,而不是更早。
此外,根据用户的物理位置,使用像 Amazon 的 S3 服务这样的服务可以帮助用户从物理上比您的服务器更靠近他们的服务器下载它。
你的js脚本是像jQuery或原型一样常用的库吗?如果是这样,有许多公司,如谷歌和雅虎,都有工具可以在分布式网络上为你提供这些文件。
Yahoo! 卓越性能团队建议将脚本放在页面底部,因为浏览器下载组件的方式。
当然,Levi的评论“就在你需要它之前,而不是更早”确实是正确的答案,即“视情况而定”。
评论
$(function () {...})
<head>
</body>
使用 100k 的 Javascript,您永远不应该将其放入文件中。使用外部脚本 Javascript 文件。在地狱中,你不可能只在一个 HTML 页面中使用这么多代码。您可能正在询问应该在哪里加载 Javascript 文件,为此您已经收到了令人满意的答案。
但我想指出的是,通常,现代浏览器接受 gzipped Javascript 文件!只需将文件压缩到 ,并在属性中指向该文件即可。它不能在本地文件系统上运行,你需要一个 Web 服务器才能工作。但是,传输字节的节省可能是巨大的。x.js
x.js.gz
src
我已经在 Firefox 3、MSIE 7、Opera 9 和 Google Chrome 中成功测试了它。它显然在 Safari 3 中无法以这种方式工作。
有关更多信息,请参阅这篇博文,以及另一个非常古老的页面,该页面仍然很有用,因为它指出 Web 服务器可以检测浏览器是否可以接受 gzip 压缩的 Javascript。如果您的服务器端可以动态选择发送 gzip 压缩或纯文本,则可以使该页面在所有 Web 浏览器中可用。
评论
答案是取决于你如何使用javascript的对象。如前所述,在页脚而不是页眉处加载 javascript 文件肯定会提高性能,但应注意使用的对象初始化晚于在页脚加载的时间。另一种方法是加载放置在文件夹中的“js”文件 这将可用于所有文件。
就像其他人所说的那样,它很可能应该放在外部文件中。我更喜欢在 <head /> 的末尾包含此类文件。这种方法对人类比机器更友好,但这样我总是知道 JS 在哪里。在其他任何地方都包含脚本文件是不可读的(恕我直言)。
我真的需要挤出每一毫秒,那么你可能应该按照雅虎说的去做。
使用 cuzillion,您可以使用不同的方法测试不同放置的脚本标签对页面加载的影响:内联、外部、“HTML 标签”、“document.write”、“JS DOM 元素”、“iframe”和“XHR eval”。有关差异的解释,请参阅帮助。它还可以测试样式表、图像和 iframe。
将 javascript 放在顶部似乎更整洁,但从功能上讲,最好遵循 HTML。这样,您的 javascript 就不会运行并尝试在加载 HTML 元素之前引用它们。这种问题通常只有在您通过实际的互联网连接加载页面时才会变得明显,尤其是速度较慢的页面。
您也可以尝试通过从其他 javascript 代码添加标头元素来动态加载 javascript,尽管这只有在您不是一直使用所有代码时才有意义。
根据经验,放置标签的最佳位置是页面底部,就在标签之前。像这样的东西:<script>
</body>
<html>
<head>
<title>My awesome page</title>
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="...">
<link rel="stylesheet" type="text/css" href="...">
<link rel="stylesheet" type="text/css" href="...">
<link rel="stylesheet" type="text/css" href="...">
</head>
<body>
<!-- Content content content -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="..."></script>
<script type="text/javascript" src="..."></script>
<script type="text/javascript" src="..."></script>
</body>
</html>
为什么?
脚本引起的问题是它们会阻止并行下载。HTTP/1.1 规范建议浏览器为每个主机名并行下载不超过两个组件。如果从多个主机名提供映像,则可以并行进行两次以上的下载。但是,在下载脚本时,浏览器不会启动任何其他下载,即使在不同的主机名上也是如此。更多。。。
CSS的
有点跑题了,但是......将样式表放在顶部。
在研究 Yahoo! 的性能时,我们发现将样式表移动到文档 HEAD 会使页面看起来加载速度更快。这是因为将样式表放在 HEAD 中允许页面逐步呈现。更多。。。
延伸阅读
雅虎发布了一个非常酷的指南,列出了加快网站速度的最佳实践。绝对值得一读: https://developer.yahoo.com/performance/rules.html
评论
你的 javascript 链接可以放在头部或正文标签的末尾,确实可以通过将链接放在正文标签的末尾来提高性能,但除非性能有问题,否则将它们放在头部更适合人们阅读,并且您知道链接的位置并且可以更轻松地引用它们。
我想说的是,这取决于您计划使用 Javascript 代码实现什么:
- 如果您打算插入外部 JS 脚本,那么最好 位置位于页面的头部
- 如果您计划在智能手机上使用页面,那么页面底部, 就在标记之前。
- 但是,如果您打算将 HTML 和 JS 组合在一起(动态地 创建并填充 HTML 表格,例如)然后您必须将 它在哪里你需要它。
评论
document.write
脚本应包含在 body 标记的末尾,因为这样 HTML 将由浏览器解析并在加载脚本之前显示。
问题的答案取决于。在这种情况下有 2 种方案,您需要根据适当的方案做出选择。
方案 1 - 关键脚本/必须需要的脚本
如果您使用的脚本对于加载网站很重要,建议将其放置在 HTML 文档的顶部,即 .一些示例包括 - 应用程序代码、引导程序、字体等。<head>
方案 2 - 不太重要的/分析脚本
还有一些使用的脚本不会影响网站的视图。建议在加载所有重要段后加载此类脚本。答案将是文档的底部,即结束标签之前的底部。一些例子包括 - 谷歌分析、hotjar 等。<body>
奖金 - 异步/延迟
您还可以告诉浏览器,脚本加载可以与其他脚本同时完成,并且可以根据浏览器的选择使用脚本代码中的 defer / async 参数进行加载。
例如。<script async src="script.js"></script>
评论