在JavaScript中,我怎样才能知道一个资源是否已经存在于浏览器缓存中?
我们正在对一部分客户端页面视图进行测试,以便更好地了解用户页面加载的速度。当用户第一次访问我们的站点时,浏览器会缓存一些资源(JS、CSS、图像),因此他们的初始页面加载速度会比后续的快。
现在,这些数据是混合在一起的,因此很难区分初始页面加载和由其他原因导致的后续页面视图的缓慢。我希望有一种跨浏览器的方法来检查缓存是否已经准备好,以便我可以将这两种类型的页面视图分开并单独分析它们。
在JavaScript中,我怎样才能知道一个资源是否已经存在于浏览器缓存中?
我们正在对一部分客户端页面视图进行测试,以便更好地了解用户页面加载的速度。当用户第一次访问我们的站点时,浏览器会缓存一些资源(JS、CSS、图像),因此他们的初始页面加载速度会比后续的快。
现在,这些数据是混合在一起的,因此很难区分初始页面加载和由其他原因导致的后续页面视图的缓慢。我希望有一种跨浏览器的方法来检查缓存是否已经准备好,以便我可以将这两种类型的页面视图分开并单独分析它们。
您应该使用传输大小:
window.performance.getEntriesByName("https://[resource-name].js")[0].transferSize
为了验证它,您可以在Chrome上运行上面的代码...
cache-control
头部加载过,则transferSize
应该为0。transferSize
应该大于0。没有适用于检查资源是否被缓存的JavaScript API。我认为你能做的最好的事情是检查加载资源所需的时间,并将那些加载时间较短的资源放在一起。
页面顶部:
<script>var startPageLoad = new Date().getTime();</script>
在每个资源上:
<img src="foo.gif" onload="var fooLoadTime = startPageLoad - new Date().getTime()">
<script src="bar.js" onload="var barLoadTime = startPageLoad - new Date().getTime()">
在报告加载时间时:
var fooProbablyCached = fooLoadTime < 200; // Took < 200ms to load foo.gif
var barProbablyCached = barLoadTime < 200; // Took < 200ms to load bar.gif
您可能需要在IE中使用onreadystatechange事件而不是onload。
您需要一个插件来完成此操作。Firebug 可以在您安装它后(适用于 Firefox),在“NET”选项卡上告诉您。JavaScript 本身无法查看浏览器的 HTTP 流量。
.transferSize
:( - kigiri