确保从磁盘缓存中获取JavaScript

时间:2017-03-27 20:10:01

标签: javascript http-caching

我有一个基于AJAX的应用程序,它包含以下页面:

home.html --> browse_projects.html --> view_project.html

home.html中,我按如下方式获取脚本:

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/js/materialize.min.js"></script>
</head>

获取materialize.min.js后,我可以看到浏览器缓存了这个。

现在,browse_projects.html也恰好需要materialize.min.js。 所以,我把它包括在内:

<script src="//cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/js/materialize.min.js"></script>

但是,在运行某些测试时,我注意到浏览器没有从缓存中检索它。相反,它会获得一个带有URL的新副本,例如:

https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/js/materialize.min.js?_=1490644754909

现在,我的问题是 - 为什么不检索缓存副本?我该如何强制执行此操作?

1 个答案:

答案 0 :(得分:0)

它未在测试中缓存的原因是:_=1490644754909 - 随机数附加到URL。浏览器根据URL缓存静态资产,如果URL每次都更改,浏览器将不会缓存资产(又名:&#34;缓存清除&#34;)。如果您没有使用可以将随机字符串附加到内联URL的模板库,则可以使用Javascript加载脚本:

<script>
function loadScript(src) {
   var script = document.createElement('script');
   script.src = script.src + '?_=' + (+new Date());
   document.head.appendChild(script);
}

loadScript('https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.8/js/materialize.min.js');
</script>

这会在URL末尾附加一个随机数,以防止浏览器缓存。