是否有可能使用JavaScript确定已加载的Web资源,例如CSS、JScript、图像,甚至HTML本身是来自缓存还是非缓存?
我正在尝试在我的开发模式下直接在每个页面上创建一个简单的报告,以避免每次都打开Google Chrome调试工具。
是否有可能使用JavaScript确定已加载的Web资源,例如CSS、JScript、图像,甚至HTML本身是来自缓存还是非缓存?
我正在尝试在我的开发模式下直接在每个页面上创建一个简单的报告,以避免每次都打开Google Chrome调试工具。
虽然没有直接的方法可以使用JavaScript来解决这个问题,但我们可以使用windows.performance JavaScript API来使用一个不太正当的解决方案。下面是一个示例:
var fileToLookup = "http://sample.com/img/loader.png";
var isCached = Boolean(_.filter(window.performance.getEntries(),function(a){ return a.duration > 0 && a.name == fileToLookup }).length)
在这里,我们正在迭代页面引用的资源并按持续时间进行过滤。如果一个资源花费了> 0ms的时间,我们就认为它没有被缓存。再次强调,这不是绝对可靠的方法。
window.performance.getEntriesByName("resource.js")[0].duration
,即使是带有正确的 cache-control
标头的资源,持续时间始终大于 0。我的意思是,它们应该被缓存。 - Andre Penawindow.performance.getEntriesByName("https://www.google-analytics.com/analytics.js")[0].duration
。它不是零。 - Andre PenatransferSize
。请查看我的答案。 - Andre Pena有许多解决方案可以防止浏览器缓存资源,例如:
您可以在文件名后面添加资源版本号。每次修改媒体文件(图像/JS/CSS)时,都要更新资源版本。
<?php $resourceVer = '201404151859'; ?>
<script src='scripts/main.js?v=<?=$resourceVer?>'></script>
<link rel='stylesheet' href='style/main.css?v=<?=$resourceVer?>' />