我正在使用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 ?
周一将进行进一步调查,并在此处进行更新。