现在我们有一个简单的最近最少使用算法,一旦超过某个限制就开始删除旧条目,还有一个在驱逐条目之前考虑重用和年龄的第二个算法。
但是,当在我的 Chrome 中测试具有重复请求的网站时,我注意到当缓存已满时,一个 5 MB 的大文件会不断地从缓存中清除,而较小的文件会被缓存。
缓存驱逐的文档是错误的,还是对这种行为有任何其他解释?
现在我们有一个简单的最近最少使用算法,一旦超过某个限制就开始删除旧条目,还有一个在驱逐条目之前考虑重用和年龄的第二个算法。
但是,当在我的 Chrome 中测试具有重复请求的网站时,我注意到当缓存已满时,一个 5 MB 的大文件会不断地从缓存中清除,而较小的文件会被缓存。
缓存驱逐的文档是错误的,还是对这种行为有任何其他解释?
解释很简单:Chrome(ium) 不使用“简单的最近最少使用算法”。
对 Chromium 源文件 MemoryCache.cpp的检查 在其最后发现了这行代码,其中包含一个打印缓存的调试例程:
LRU-SP 算法首先在论文 LRU-SP: A Size-Adjusted and Popularity-Aware LRU Replacement Algorithm for Web Caching中进行了描述,该论文发表在第 24 届年度国际计算机软件和应用会议上。
该算法的描述在帖子中给出了 各种流行的 Web 浏览器使用哪些缓存替换策略?,由费利克斯·杰瑟特提供:
我猜在你的情况下,公式“大小/访问”给出了一个很大的值,因为这是一个只访问一次的大文件,所以这个 5 MB 的文件是第一个被驱逐的候选者。