将 <link>
放在 <head>
中
将 <link>
放在 <head>
中是构建优化网站的正确规范的一部分。当页面首次加载时,HTML 和 CSS 同时被解析;HTML 创建 DOM(文档对象模型),CSS 创建 CSSOM(CSS 对象模型)。两者都需要在网站中创建视觉效果,从而实现快速的“首次有意义绘制”时间。这种渐进式渲染是衡量网站性能得分的优化类别。将样式表放在文档底部会阻止许多浏览器进行渐进式渲染。一些浏览器会阻止渲染,以避免在样式更改时重新绘制页面元素。然后用户只能看到空白页面。有时会出现未样式化内容的闪烁 (FOUC),显示未应用样式的网页。
将 <script>
放在 </body>
之前
<script>
标签在下载和执行时会阻塞 HTML 解析,这会减慢您的页面速度。将脚本放在底部将允许 HTML 首先被解析和显示给用户。
将 <script>
放在底部的一个例外是当您的脚本包含 document.write()
时,但现在使用 document.write()
不是一个好习惯。此外,将 <script>
放在底部意味着浏览器无法开始下载脚本,直到整个文档被解析。这确保了您的需要操作 DOM 元素的代码不会抛出错误并停止整个脚本。如果您需要将 <script>
放在 <head>
中,请使用 defer
属性,它将实现相同的效果:仅在 HTML 解析后运行脚本,但浏览器可以更早地下载脚本。
请记住,将脚本放在闭合 </body>
标签之前会造成页面在空缓存上加载速度更快的错觉(因为脚本不会阻塞文档其余部分的下载)。但是,如果您有一些代码要在页面加载期间运行,它只会在整个页面加载完成后才开始执行。如果您将这些脚本放在 <head>
标签中,它们会更早开始执行——所以在预热缓存上,页面实际上会显得加载更快。
<head>
和 <body>
标签现在是可选的
根据 HTML5 规范,某些 HTML 标签,如 <head>
和 <body>
,是可选的。谷歌的样式指南甚至建议删除它们以节省字节。然而,这种做法仍未被广泛采用,性能增益可能微乎其微,对于大多数网站来说,这可能无关紧要。