SDWebImageSwiftUI中Cache-Control头与maxDiskAge的缓存优先级问题
SDWebImageSwiftUI 缓存规则:本地配置 vs HTTP头 max-age
你在AppDelegate中设置的这段本地缓存配置:
// Set the image cache expiration to one day. SDImageCache.shared.config.maxDiskAge = 60 * 60 * 24 // 250 MB SDImageCache.shared.config.maxDiskSize = 250 * 1024 * 1024
SDWebImage会同时参考这个本地配置和HTTP响应头的Cache-Control max-age,但两者的作用场景不同,不存在单纯的优先级覆盖:
- HTTP头的
max-age负责判断缓存的「新鲜度」:如果缓存文件的存储时间未超过max-age指定的时长,会直接使用缓存无需发起新请求;一旦超过这个时长,会发起条件验证请求(如携带If-Modified-Since),确认资源是否更新后再决定使用缓存还是新资源。这个规则是判断缓存是否可直接复用的核心依据。 - 本地设置的
maxDiskAge负责限制缓存的「磁盘留存时长」:这是磁盘缓存文件的最大保存期限,不管HTTP头的规则如何,只要缓存文件在磁盘上存储的时间超过1天(你设置的60*60*24秒),SDWebImage在执行缓存清理时就会将其删除,该缓存文件后续无法再被使用。
举两个实际场景理解:
- 若HTTP头
max-age设为7天,本地maxDiskAge设为1天:缓存文件在1天后就会被清理,根本无法达到7天的新鲜期; - 若HTTP头
max-age设为1天,本地maxDiskAge设为7天:缓存1天后会被判定为不新鲜,需要验证资源是否更新,但缓存文件会在磁盘上保留7天才被删除。
另外你设置的maxDiskSize是磁盘缓存的总容量上限,当缓存总大小超过250MB时,SDWebImage会按照文件最后访问时间,优先删除最久未使用的缓存文件,这是和时间规则互补的缓存清理逻辑。
内容的提问来源于stack exchange,提问作者PH Celos
相关产品推荐
相关产品推荐

