0

之前我在 google Insights 中测试过,它列出了一些可以添加到期日期的图像、css 和 js 文件,至少这是我对此的理解:

使用高效的缓存策略服务静态资产

因此,我通过将图像添加到 aws s3 存储桶并将持续时间设置为 7 天来进行测试。当我在 Chrome 开发工具中检查时,它确实显示Cache-Control: max-age=604800. 大小表示从内存中获取,状态码为 304。

但是现在当我在谷歌页面速度洞察中再次测试时,它仍然在下面显示这个特定的图像

使用高效的缓存策略服务静态资产

部分。

如果按照建议添加到期/更长的持续时间,为什么它仍会在此处显示图像?为了使这个静态文件正确提供,我还应该做些什么吗?

4

1 回答 1

0

谷歌的 Lighthouse 建议一年,但也解释说它的启发式比硬编码的限制更普遍。

如果您想听从他们的建议,最简单的方法是使用一年,尽管较小的值应该可以通过检查。

从例子:

Cache-Control: max-age=31536000

如果可能,将不可变的静态资产缓存很长时间,例如一年或更长时间。配置您的构建工具以在您的静态资产文件名中嵌入哈希,以便每个文件名都是唯一的。

启发式被解释为源自真实统计数据,而不是具有特定值:

该估计值包括基于向 Chrome 报告的汇总使用统计信息,对每个资源的最佳缓存持续时间进行的一些计算。更长的持续时间不一定更好。查看审计源以获取详细信息。最终,由您决定资源的最佳缓存持续时间。

源代码中,您可以看到启发式是如何定义的:

// Ignore assets that have very high likelihood of cache hit
const IGNORE_THRESHOLD_IN_PERCENT = 0.925;

...

const cacheHitProbability = CacheHeaders.getCacheHitProbability(cacheLifetimeInSeconds);
if (cacheHitProbability > IGNORE_THRESHOLD_IN_PERCENT) continue;

...
static getCacheHitProbability(maxAgeInSeconds) {
// This array contains the hand wavy distribution of the age of a resource in hours at the time of
// cache hit at 0th, 10th, 20th, 30th, etc percentiles.
// Example: a max-age of 12 hours already covers ~50% of cases, doubling to 24 hours covers ~10% more.
...
const RESOURCE_AGE_IN_HOURS_DECILES = [0, 0.2, 1, 3, 8, 12, 24, 48, 72, 168, 8760, Infinity];
assert.ok(RESOURCE_AGE_IN_HOURS_DECILES.length === 12, 'deciles 0-10 and 1 for overflow');

长话短说:我相信阈值在三个月左右(大约 0 个月max-age=8337600),但匹配确切值不太可能比选择一年更有用。

于 2019-01-22T11:48:30.400 回答