【问题标题】:"Optimize CSS Delivery" - Why Google uses this much code to load CSS file?“优化 CSS 交付” - 为什么 Google 使用这么多代码来加载 CSS 文件?
【发布时间】:2018-09-12 00:30:40
【问题描述】:

这是Google Optimize CSS Delivery page。在底部谷歌建议使用此代码在页面正文的末尾加载 CSS 文件:

  <noscript id="deferred-styles">
      <link rel="stylesheet" type="text/css" href="small.css"/>
    </noscript>
    <script>
      var loadDeferredStyles = function() {
        var addStylesNode = document.getElementById("deferred-styles");
        var replacement = document.createElement("div");
        replacement.innerHTML = addStylesNode.textContent;
        document.body.appendChild(replacement)
        addStylesNode.parentElement.removeChild(addStylesNode);
      };
      var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
          window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
      if (raf) raf(function() { window.setTimeout(loadDeferredStyles, 0); });
      else window.addEventListener('load', loadDeferredStyles);
    </script>
  </body>

我的问题是为什么不只使用这一行来完成这项工作?尤其是我们身处 HTML5 世界。

<link rel="stylesheet" type="text/css" href="small.css"/>
</body>

【问题讨论】:

    标签: css performance pagespeed


    【解决方案1】:

    当浏览器解析 HTML 响应时,它会逐行解析。当它遇到&lt;link&gt; 元素时,它会停止解析HTML,并去获取由元素的href 属性设置的资源。

    代码所做的是将 CSS 包装在 &lt;noscript&gt; 元素中作为后备元素,而不是阻止页面加载,而是在页面完成加载后请求 CSS。这是一种手动为&lt;link&gt; 元素赋予与&lt;script&gt; 元素的defer 属性类似的行为的方法。

    【讨论】:

    • 谢谢。但是除了&lt;/body&gt; 标记之外,该页面已被加载。 &lt;/body&gt;标签解析后加载CSS文件重要吗?
    • 在大多数情况下,这样做并不是必需的,尤其是当您使用link[rel="preload"] 获取子资源时。这种实现的性能提升仅真正显示了具有 very 高 ping 的连接。并且放在&lt;/body&gt; 之后是无效的。
    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 2014-10-25
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 2014-07-13
    相关资源
    最近更新 更多