谷歌的 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
),但匹配确切值不太可能比选择一年更有用。