为何小体积favicon.png加载耗时是同类文件的10倍?
Cloudflare缓存异常问题排查与解决
1. 为啥favicon.png比logo.png加载慢10倍?
- 看响应头就能找到根源:
logo.png带有age字段,说明请求命中了Cloudflare边缘缓存(HIT),直接从节点取资源;而favicon.png无age字段,意味着每次请求都要回源拉取,这就是耗时差的核心原因。 - Cloudflare对favicon这类特殊文件的默认缓存规则可能偏严格,比如默认TTL设置极短甚至不缓存,和普通图片的缓存逻辑区别对待。
2. 为啥刚HIT的资源几秒后就变MISS?
- Cloudflare边缘节点的缓存空间有限,采用LRU(最近最少使用)淘汰机制:当节点缓存满了,会优先清理访问量低的资源,哪怕TTL还没到期。favicon这类资源访问量通常不高,很容易被快速清理,导致刚命中过也会秒变MISS。
- 你禁用了Tiered Cache,这个功能原本是通过中间层缓存分担边缘节点压力的,禁用后边缘节点的缓存淘汰频率会升高,进一步加剧资源被清理的概率。
3. 启用Cache Reserve但禁用Tiered Cache,这配置靠谱吗?
- 这不是最佳实践。Cache Reserve是作为长期存储的兜底层设计的,需要和Tiered Cache配合使用:Tiered Cache负责分层缓存热点资源,Cache Reserve存储不常访问但需保留的资源,两者协同才能最大化缓存命中率。
- Cloudflare的警告是合理的,禁用Tiered Cache后直接用Cache Reserve,会绕开边缘节点的高效缓存链路,反而增加请求延迟,还容易引发异常。
4. 为啥开了Cache Reserve还是出现无age字段的慢加载资源?
- 部分资源可能未被正确纳入Cache Reserve范围:比如favicon,需要在Cloudflare的缓存规则中明确设置缓存优先级,确保被Cache Reserve收录,否则可能被默认规则排除。
- 缓存规则冲突:如果源站给这类资源设置了
no-cache、no-store或极短TTL的Cache-Control响应头,会直接覆盖Cloudflare的缓存配置,哪怕开了Cache Reserve也无法生效,需要在Cloudflare规则中覆盖源站响应头。 - 节点同步延迟:Cache Reserve启用后,边缘节点与存储层的资源同步需要时间,部分节点可能未完成同步,导致请求时无法命中缓存。
实操修复步骤
- 先恢复Tiered Cache的启用状态,与Cache Reserve配套使用,遵循产品设计逻辑。
- 给静态资源(包括favicon、logo)创建专门的缓存规则:
- 设置
Cache Level为Cache Everything - 自定义TTL设为1天及以上,避免被快速淘汰
- 开启
Cache Reserve选项,将资源纳入长期存储
- 设置
- 检查源站的
Cache-Control响应头,若有禁止缓存的设置,在Cloudflare中添加规则覆盖该响应头。 - 手动执行Cloudflare缓存清理(
Purge Everything),让新规则立即生效。
内容的提问来源于stack exchange,提问作者alancc
相关产品推荐
相关产品推荐

