之前,当我在谷歌洞察力中测试时,它列出了一些图片、css和js文件,这些文件可以添加到期日--至少这就是我所理解的:
使用高效的缓存策略服务静态资产
因此,我正在通过将图像添加到aws s3桶中进行测试,并设置7天的持续时间。当我在Chrome工具中签入时,它确实显示了Cache-Control: max-age=604800。大小表示从内存中提取,状态代码为304。
但是现在,当我在google页面速度洞察力中再次测试时,它仍然显示了下面这个特定的图像
使用高效的缓存策略服务静态资产
部分。
如果按照建议添加了过期/较长的持续时间,为什么它仍然在这里显示图像?为了使这个静态文件正确地服务,我还需要做些什么吗?
发布于 2019-01-22 11:48:30
谷歌灯塔建议一年,但也解释说,它的启发比硬编码的限制更普遍。
如果您想遵循他们的建议,使用一年是最简单的,尽管一个较小的值应该通过检查。
从这个例子来看:
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');长话短说:我相信门槛在三个月左右(大约是max-age=8337600),但是匹配确切的值不太可能比挑选一年更有用。
https://stackoverflow.com/questions/54300695
复制相似问题