我正在使用JavaScript脚本,该脚本告诉我特定的图像URL是否已缓存在用户的浏览器缓存中。我之所以使用它,是因为我构建了一组非缓存图像,这些图像将在完成更重要的过程之后分别加载。该脚本是专为Google Chrome浏览器编写的,因此我不需要跨浏览器的解决方案。

我当前的函数检查加载图像所花费的时间,如果它小于几毫秒(当前为25ms),我认为它是从缓存中提取的。

通过检查Chrome开发人员工具中的资源面板,可以很容易地手动发现已缓存和未缓存图像之间的差异。当悬停加载时间时,Chrome会通过打印如下所示的工具提示来告知是否从缓存中拉出了文件:xx ms Latency, xx ms Download (from cache)

我注意到在某些情况下,延迟时间很长(例如64ms仅2ms下载时间),并且由于总加载时间超过了阈值,我的检测功能变得无用。不可能增加阈值,因为较小并且未缓存的图像也可以在相同的时间内加载。

现在您遇到了我的问题,这是我的问题:

-是否可以100%准确的方式(例如chrome的资源面板)检查文件是否来自缓存? (我想如果该小组能够做到,必须有一种方法,但是我在互联网上找不到)

要么

-是否可以将两个延迟(即延迟与下载)分开以仅检查真正的下载时间?计算从开始加载图像到onload事件之间花费的时间将返回总时间。

感谢您阅读我的问题,即使您没有精确的解决方案,也欢迎您提出想法,想法!

(PS:我不是讲英语的人,所以请不要怪我犯错!)

盖尔

最佳答案

对不起,您的答案有误。

我做了一些测试,发现以下结果:304 not modified header 仅在资源陈旧并由服务器通过If-None-Match / If-Modified-Since进行验证时出现。当资源仍然新鲜且不需要验证时,返回的状态码为200 Ok

但是,似乎有一个Age header ,指示正在缓存资源。
所以我想我可以切换到PHP并做类似if status code is 304 or Age header exists then resource is cached的事情。但是,如果没有Cache-Control: max-age=xx header 怎么办?无论如何,只要资源被缓存和新鲜,是否存在Age header ?

周一将进行进一步调查,并在此处进行更新。

08-17 12:53
查看更多