相关疑难解决方法(0)

CSS交付优化:如何推迟css加载?

我正在尝试针对开发人员的Google文档优化CSS交付https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery#example

正如您在内联一个小CSS文件的示例中所看到的那样,内联中的内核中的关键CSS和原始的small.css在页面加载后加载.

<html>
  <head>
    <style>
      .blue{color:blue;}
    </style>
    </head>
  <body>
    <div class="blue">
      Hello, world!
    </div>
  </body>
</html>
<noscript><link rel="stylesheet" href="small.css"></noscript>
Run Code Online (Sandbox Code Playgroud)

关于这个例子的问题:

如何在页面加载后加载大型css文件?

html javascript css deferred-loading google-pagespeed

59
推荐指数
7
解决办法
8万
查看次数

优化CSS交付 - Google的建议

谷歌建议在头部和其他CSS内部使用非常重要的CSS内联<noscript><link rel="stylesheet" href="small.css"></noscript>.

这引起了我的一些问题:

  • 如何在两个文件中确定CSS的优先级.该页面的所有内容都很重要.显示,字体等.如果我将它移动到底部,那么它如何帮助页面渲染.它不会导致重画等吗?
  • 在Document ready事件之后是否需要CSS?从这里得到它.
  • 如何'CSS可以'进入内部<noscript></noscript>,这是脚本?启用JavaScript时它会起作用吗?浏览器兼容吗?

参考

html css optimization performance

15
推荐指数
1
解决办法
4262
查看次数

根据Google优化CSS交付

所以我通过Google的PageSpeed Insights运行我的网站,它告诉我,我可以通过延迟加载非关键资源来改善CSS交付.特别是它引用了包含字体真棒:

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
Run Code Online (Sandbox Code Playgroud)

我想我可以通过简单地将它放在关闭body标签之前的脚本之前来延迟它的负载,如下所示:

  ...
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
  <script src="js/min/scripts.min.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

然而!在查看Google 关于交付速度文档时,我发现了两种不同的解决方案.

用我的母语(荷兰语;你可以在右下角更改文档的语言)文档声明我应该将非必要的CSS 放在结束的html标记之下.这对我来说似乎很奇怪.在尝试通过JS访问文件时,这会不会复杂化? 你为什么不把它放在关闭身体标签之前?

  ...
  </body>
</html>
<link rel="stylesheet" href="small.css">
Run Code Online (Sandbox Code Playgroud)

但是,在英文文档中,事情变得更复杂并需要JavaScript:

    ...
    <script>
      var cb = function() {
        var l = document.createElement('link'); l.rel = 'stylesheet';
        l.href = 'small.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>
  </body>
</html> …
Run Code Online (Sandbox Code Playgroud)

css performance pagespeed

8
推荐指数
1
解决办法
608
查看次数