首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WHy是否要求为过期图像提供高效缓存策略的静态资产?

WHy是否要求为过期图像提供高效缓存策略的静态资产?
EN

Stack Overflow用户
提问于 2019-01-22 03:06:13
回答 1查看 2.2K关注 0票数 0

之前,当我在谷歌洞察力中测试时,它列出了一些图片、css和js文件,这些文件可以添加到期日--至少这就是我所理解的:

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

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

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

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

部分。

如果按照建议添加了过期/较长的持续时间,为什么它仍然在这里显示图像?为了使这个静态文件正确地服务,我还需要做些什么吗?

EN

回答 1

Stack Overflow用户

发布于 2019-01-22 11:48:30

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

如果您想遵循他们的建议,使用一年是最简单的,尽管一个较小的值应该通过检查。

从这个例子来看:

代码语言:javascript
复制
Cache-Control: max-age=31536000

在可能的情况下,缓存长期不变的静态资产,比如一年或更长时间的。将构建工具配置为在静态资产文件名中嵌入散列,使每个哈希都是唯一的。

这种启发被解释为是从实际统计中得出的,而不是具有特定值:

这个估计包括对每个资源的最佳缓存持续时间的一些计算,基于向Chrome报告的汇总使用统计数据。的持续时间不一定更长。请查看审核源以获得详细信息。最终,要由您决定资源的最佳缓存持续时间是什么。

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

代码语言:javascript
复制
// 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),但是匹配确切的值不太可能比挑选一年更有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54300695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档