【发布时间】:2015-05-19 09:42:59
【问题描述】:
我通过 Pingdom 测试了我的网站并得到了这个:
我搜索但找不到解决方案。有谁知道我怎样才能得到这个 14 到 100?
【问题讨论】:
-
不要下载和自托管 CSS 来解决这个问题。 stackoverflow.com/a/57073920/369005
标签: browser-cache google-font-api
我通过 Pingdom 测试了我的网站并得到了这个:
我搜索但找不到解决方案。有谁知道我怎样才能得到这个 14 到 100?
【问题讨论】:
标签: browser-cache google-font-api
不是一个完整的解决方案,但您可以通过将两个请求合并为一个来改善这种情况:
https://fonts.googleapis.com/css?family=Montserrat|Open+Sans
我对@987654321@ 上的两种字体执行此操作,得分为 86,而您的得分为 14。重要的是,这是真正的加速,而不仅仅是降低任意分数的技巧。
【讨论】:
Montserrat,如果不可用则寻找Open+Sans?
由于您无法控制 Google 的标头(包括过期标头),我只能看到一种解决方案 - 将这两个样式表和字体下载到您自己的托管服务器,并相应地更改 HTML 标签。
然后,您可以根据需要设置过期标头(Pingdom 称为“生命周期”)。
例如打开first link:
/* latin */
@font-face {
font-family: 'Montserrat';
font-style: normal;
font-weight: 400;
src: local('Montserrat-Regular'), url(http://fonts.gstatic.com/s/montserrat/v6/zhcz-_WihjSQC0oHJ9TCYAzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2');
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}
下载此 .woff2 文件并将其保存在您的网络服务器上的任何位置。将此样式表复制并粘贴到您自己的任何 CSS 文件或 HTML 中。将链接从 fonts.gstatic.com 更改为您的新 URL。
Google 提供这些字体的有效期为 1 天。您现在可以轻松地将其设置为 30 天。
【讨论】:
首先,重要的是要明确缓存 Google 字体 CSS 文件和实际字体文件之间的区别。根据Google Fonts FAQs的说法,他们的字体文件实际上缓存了一年。就是缓存 24 小时的 CSS 文件:
对 CSS 资产的请求会缓存 1 天。这允许我们更新样式表以在更新时指向字体文件的新版本,并确保所有使用由 Google Fonts API 托管的字体的网站将在每次发布后 24 小时内使用每种字体的最新版本.
字体文件本身缓存一年,累积起来有让整个网络更快的效果:当数以百万计的网站都链接到相同的字体时,它们在访问第一个网站后被缓存,并立即出现在所有其他网站上随后访问的网站。我们有时会更新字体文件以减小文件大小、增加语言覆盖率并提高设计质量。结果是网站访问者向 Google 发送的请求很少:我们只看到每个字体系列、每天、每个浏览器的 1 个 CSS 请求。
我建议您不要自己托管这些 CSS 文件,因为您会落后并且不会使用最新版本的字体更新。
但是,有几种方法可以加快 CSS 请求:
https://fonts.googleapis.com/css?family=Montserrat|Open+Sans
<link href="https://fonts.googleapis.com/css?family=Montserrat|Open+Sans:400,400i,700" rel="stylesheet">
【讨论】:
Montserrat,如果不可用再寻找Open+Sans?
if(Montserrat || OpenSans) { doSomething(); }
请注意,您不能将 Google 提供的 css 缓存超过 24 小时。
【讨论】:
我看到许多建议您下载 CSS 并自己托管的答案。不要这样做,因为 Google 字体会根据浏览器的功能为每个浏览器发送不同的 CSS。
一个快速的解决方案可以是Easy Fonts CDN,它托管所有谷歌字体,并提供一些附加值,例如:
<div class="font-open-sans"></div>、<div class="font-lato"></div> 等。完整的参考可在 here 获得。如果您只想使用 Open Sans 和 Montserrat 字体,这里是您的代码:
<link href="https://pagecdn.io/lib/easyfonts/montserrat.css" rel="stylesheet" />
<link href="https://pagecdn.io/lib/easyfonts/open-sans.css" rel="stylesheet" />
如果要使用一体式文件,请使用:
<link href="https://pagecdn.io/lib/easyfonts/fonts.css" rel="stylesheet" />
【讨论】:
一个相当简单的解决方法是使用 Font Squirrel 的 Webfont Generator 生成您自己的工具包:
https://www.fontsquirrel.com/tools/webfont-generator
为了能够使用它,您需要下载字体(Montserrat 和 Open Sans 都可以在 Font Squirrel 上使用)并将它们添加到生成器中。这可用于添加进一步的自定义。 (在 Google Webfonts 中的字体没有匈牙利语必要子集的情况下,我已经多次使用它,即使它在原始字体中可用。)
【讨论】:
我要做的是将 PHP 作为后处理器添加到我的 .htaccess 文件中的 CSS 文件中(我正在使用自定义的 .pcss 文件扩展名 - 只是为了使其与我的简单 CSS 文件分开):
<FilesMatch "\.pcss$">
SetHandler application/x-httpd-php
Header set Content-type "text/css"
</FilesMatch>
然后我在我的 CSS 文件中使用以下代码来获取并回显我想要的字体 URL 的内容。
<?php
echo file_get_contents("https://fonts.googleapis.com/css?family={FONT}");
?>
【讨论】: