繁体   English   中英

如何防止 CSS 阻塞我的网站?

[英]How to keep CSS from render-blocking my website?

我正在尝试优化移动网页的加载速度,为此我正在使用该网站:

这个网站评估我的来源并告诉我我可以改进的地方。 在我的网站上,我下载了一种字体:

<link href="//fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet">

显然这阻止了我的页面的呈现。 现在,如果这是 JavaScript,我可以在标签中使用async词,它会解决问题,但这不是我正在加载的 javascript 文件!

无论如何,是否可以阻止此资源阻止我的浏览器并强制它等待下载?

你可以用 JavaScript 做到:

<script>
(function() {
    var link = document.createElement('link');
    link.rel = "stylesheet";
    link.href = "//fonts.googleapis.com/css?family=Open+Sans:400,700";
    document.querySelector("head").appendChild(link);
})();
</script>

字体将随主渲染带外加载。 当然,这意味着当字体完成加载时会有视觉上的变化……如果用户禁用了 JavaScript,它根本不会加载字体。


或者,正如 dandavis 指出的那样,您可以在body末尾,就在结束</body>标记之前使用style元素:

<style>
@import "//fonts.googleapis.com/css?family=Open+Sans:400,700"
</style>

现在这是有效的 HTML(从 HTML 5.2 的 20170808 草案开始),但我从来没有遇到过一个浏览器会关心它,如果你在body放置style甚至在它生效之前。

与使用 JavaScript 相比,这样做的优点是:

  1. 理论上,浏览器的预取扫描器可能会找到style元素并更早开始下载(尽管如果您将 JavaScript 放在head ,这不太可能),并且

  2. 即使用户禁用了 JavaScript,它也能工作。

或者,您可以将link元素移动到body的末尾,但目前,这是无效的,并且scoped属性(还?)似乎不适用。 (为什么让它适用于style而不是link[rel=stylesheet] ?我不知道,也许这只是还没有到达那里的问题......)

<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.5.18/webfont.js"></script>
<script>
 WebFont.load({
    google: {
      families: ['Open Sans:400,700,400italic,700italic']
    }
  });
</script>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM