【问题标题】:Eliminate external render-blocking消除外部渲染阻塞
【发布时间】:2013-08-03 12:46:53
【问题描述】:

PageSpeed Insights 建议我:

“消除首屏内容中的外部渲染阻止 Javascript 和 CSS。您的页面有 1 个阻止 CSS 资源。这会导致页面渲染延迟。优化以下资源的 CSS 交付: http://itransformer.es/css/c0f9425.css"

css文件c0f9425.cssjquery-ui.css文件和自定义文件的组合文件。

我真的不明白这一点。我应该如何遵循这个建议?

【问题讨论】:

标签: css pagespeed


【解决方案1】:

Google 建议您将最初需要的(首屏)CSS 内联,并在页面加载就绪时加载其余的 CSS。 See here.

javascript 也是如此。包括“必须有代码”内联并在页面加载时加载“很高兴有代码”为suggested here

想法是尽可能快地加载用户首先看到的内容。

我个人觉得很难遵循,因为它会拆分代码并使其更难维护。不过对于大型项目来说很有意义……

【讨论】:

  • 好的。谢谢你。我暂时不会更改它,但我想我只使用了 jquery-ui 的一小部分,并且发送所有代码效率不高。我会记住的。
  • 但基本上,这个建议会违反谷歌和其他人的许多其他规则和最佳实践!首先,您必须为每个页面加载加载内联 css,而不仅仅是一次。另一点是,您必须弄乱 HTML 和 CSS 代码。第三点,它更难维护。对不起谷歌,但那很愚蠢
  • @leftjustified 意见相同。但是当你有一个大项目时,额外的工作可能是值得的。所以一如既往,这取决于!
  • 是的,这项工作有时值得去做。但最后,css 位于 html 中,这意味着每次都加载它,并且每次请求都没有缓存。
【解决方案2】:

我仅使用 javascript 文件成功解决了这个问题。

尝试在 script 标签或 defer 属性中添加 async 属性。

例如:

<script src="filename.js" async></script>
<script src="filename.js" async="async"></script> 

<script src="filename.js" defer></script>
<script src="filename.js" async="async"></script>

我建议你使用异步,它只在需要时加载文件。延迟属性在页面末尾加载文件,有时它不会执行所需的功能。

【讨论】:

  • 感谢您的回答。我会努力回来的。
  • 嗯,答案是相对于js文件的。我的问题来自一个 css 文件。
  • 这不是对所提问题的回答。目前没有标准的 css 异步属性。
  • 该问题仅与 CSS 有关。
【解决方案3】:

消除首屏内容中的渲染阻塞CSS问题。我解决阻塞CSS资源优化CSS交付的方式如下:

<script>
        var cb = function() {
        var l = document.createElement('link'); l.rel = 'stylesheet';
        l.href = 'css/style.css';
        var h = document.getElementsByTagName('head')[0]; h.parentNode.insertBefore(l, h);
        };
        var raf = requestAnimationFrame || mozRequestAnimationFrame ||
        webkitRequestAnimationFrame || msRequestAnimationFrame;
        if (raf) raf(cb);
        else window.addEventListener('load', cb);
</script>

【讨论】:

  • 这可行,但会产生一些奇怪的成本,因为一旦加载 css,它会产生丑陋的页面刷新(~100ms)。
  • 此外,Google 甚至无法识别它。似乎 google pagespeed 喜欢整个 "" 方法。使用上述内容,它不断告诉我做任何事情。事实上,即使使用我正在使用的东西,他们也一直在告诉我要删除阻塞等等等等。不管怎样,这个方法,loadCSS 方法,除了我们已经学会的标准方法之外的任何方法,在刷新时都有轻微的非样式页面。至少 FireFox,在 Chrome 中也看到了。谷歌提出的许多建议根本没有意义。其他时候,是的,它们很有帮助。但很少。
【解决方案4】:

你可以将你所有的 css 代码文件转换成一个文件,然后 google 建议你只使用一个文件 renderblocking。否则,如果您正在使用 Wordpress 项目,您可以为您的网站使用各种插件,例如消除渲染阻塞 css 和 js。

如果你想完全渲染移除渲染阻塞,那么你可以把你所有的 css 代码放到 head 部分,效果很好。

【讨论】:

  • 你可以将你所有的 css 代码文件转换成一个文件,然后谷歌建议你只使用一个文件渲染阻塞。实际上,这就是我正在做的事情。 否则,如果您正在使用 wordpress 项目,您可以为您的网站使用各种插件,例如消除渲染阻塞 css 和 js。 我不使用 WP。 如果你想完全渲染移除渲染阻塞,那么你可以将你所有的 css 代码放入 head section 中,优先工作。我知道,但我不觉得它有用,因为它的可扩展性和难以维护。
【解决方案5】:

消除外部渲染阻塞

&lt;script src="your-path.js" defer&gt;&lt;/script&gt; &lt;script src="your-path.css" media&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多