如何在 HTML 标记中排序 <script> 标签与 <style> 标签以获得最佳效果

Posted

技术标签:

【中文标题】如何在 HTML 标记中排序 <script> 标签与 <style> 标签以获得最佳效果【英文标题】:How to order <script> tags vs. <style> tags in HTML markup for best results 【发布时间】:2011-02-02 16:06:54 【问题描述】:

我正在http://royronalds.com 上建立我的网站,并且我试图找出&lt;head&gt; 中的元素顺序最有意义。就我目前所拥有的而言,我有:

&lt;head&gt; &lt;style&gt; 外部样式表 &lt;meta&gt; &lt;title&gt; &lt;link&gt; 到网站图标 &lt;script&gt; 用于 jQuery &lt;script&gt; 网站的主要 javascript &lt;script&gt; 谷歌分析,异步脚本。 &lt;/head&gt;

是否有理由对这些进行不同的排序,以便加载时间和其他问题更顺利地发生,如果是这样,理想的顺序是什么?

【问题讨论】:

【参考方案1】:

现代浏览器会等待任何类型的渲染,直到检索到整个 &lt;head&gt; 部分(包括其中链接的文件)。因此,顺序对性能 无关紧要。对于 Javascript,文件的顺序就是执行的顺序。对于样式表,顺序决定优先级(如果所有其他条件都相同,则最后定义的规则具有优先级)。

如果您想优化客户端性能,强烈建议将您的 Javascript 包含移动到 the very end of the &lt;body&gt; element,而不是将它们放在 &lt;head&gt; 中。还有更多注意事项,Yahoo's list of optimisations 非常值得您花时间阅读。 Google has some good advice 也是。

【讨论】:

异步脚本的执行顺序不一定是它们在页面上出现的顺序。也不一定建议将异步脚本放在底部。在许多页面上,将异步脚本放在顶部附近可以减少页面总加载时间,而不会因为并行度增加而阻塞内容。【参考方案2】:

如果&lt;script&gt; 标记对内容不是必不可少的,则可以将它们移到页面底部。

例如,我会将谷歌分析&lt;script&gt; 标记移动到每个页面上&lt;/body&gt; 标记之前的最后一件事。脚本标签是“阻止内容”,因此浏览器在下载并执行脚本之前不会继续页面渲染。您的主要 javascript 和 JQuery 文件可能无法轻松移动,具体取决于您使用它们的方式,但分析肯定可以放在底部。

查看YSlow best practices 了解更多优化技术。

【讨论】:

Google Analytics 异步跟踪 sn-p 等异步脚本标签不会像普通脚本那样阻止内容。请看:stevesouders.com/blog/2010/03/03/p3pc-google-analytics 有趣。这是对 GA 代码的相对较新的更改。我不知道,谢谢你的链接。大多数网站可能仍在使用旧的非异步脚本。 大多数网站都这样做,而且您的评论绝对适用于非异步 GA sn-p。我只是想指出这个问题是关于异步 GA 的。【参考方案3】:

还要考虑浏览器会在发生错误时停止 javascript 执行这一事实。

因此,您的 javascript 在所有浏览器上都能正常工作非常重要,否则您的 Analytics 代码将面临无法执行和捕获统计数据的风险......

我通常将我的 Google Analytics 放在我自己的代码之上,以便它首先运行,如果在极少数情况下我的代码中断或导致 JS 错误,我仍然能够获取跟踪信息。

我的订单是:

<head>
<meta> content encoding
<title>
<link> favicon
<style> external/third-party stylesheet
<style> site stylesheet
</head>
<body>
...
<script> google analytics
<script> jQuery
<script> jQuery plugins
<script> site javascript
</body>

【讨论】:

浏览器只对发生错误的脚本标签停止脚本执行。他们将继续执行其他脚本中的代码。在 GA 脚本上方有一个损坏的脚本不会停止发送跟踪信标。【参考方案4】:

顺便说一句,尝试反垃圾邮件您的电子邮件地址...

即:

<SCRIPT TYPE="text/javascript">
document.write('<A HREF=' + '"mai' + 'lto:' + 'example@' + 'example' + '.fr' + '?' + 'sub' + 'ject=music'+'example'+'text">' + 'example' +'@' + 'example' +'.' + 'fr' + '</A><BR>')
</SCRIPT>

它对我有用...

【讨论】:

是的,我会尝试为此考虑一些东西(最好是更容易获得的东西)。 这应该是评论,而不是答案。【参考方案5】:

如果您使用的是 Wordpress,那么您可以轻松使用此插件:http://wordpress.org/extend/plugins/performance-optimization-order-styles-and-javascript/ 并充分利用它。

【讨论】:

以上是关于如何在 HTML 标记中排序 <script> 标签与 <style> 标签以获得最佳效果的主要内容,如果未能解决你的问题,请参考以下文章

从 html 中的 <script> 标记中提取 var

我应该将 <script> 标签放在 HTML 标记中的啥位置?

DOM 解析器,允许 HTML5 样式的 </ 在 <script> 标记中

如何在更改 innerHTML 时运行 <script>

如何在 HTML 脚本标签中插入任意 JSON

在 HTML 头部中排序图标 <link> 标记的最佳实践