javascript - 使用 PHP 强制更新之前版本的 css / javascript 的缓存
问题描述
有很多关于如何防止用户的浏览器缓存旧版本的 JS 和 CSS 文件的问答。
对于网络应用程序的频繁用户,我希望缓存这些文件,但是当我更新 JS/CSS 内容时,我希望用户自动获取新版本。
毫无疑问,其他人也使用了类似的东西,但我不喜欢我发现的大多数建议,我想出了这个:
<?php $css_last_mod = filemtime("path_to/styles.css"); ?>
<link href="path_to/styles.css?v=<?php echo $css_last_mod; ?>" rel="stylesheet" />
将其包含在您的标头中,CSS 文件的最后修改时间戳只会在文件更新时更改。(从而向浏览器表明有新版本)
<link href="includes_public/styles.css?v=1579628430" rel="stylesheet">
当然,同样的概念也可以用于 JS 文件。
是否有任何已知的兼容性问题?
解决方案
不,不存在兼容性问题;我对每个 webapp 都使用它,我没有问题。这是我的代码,我总是强制不缓存
<script type="text/javascript">
var time = new Date();
var js = ['a','c','d']; //this is my js files
var style = ['s','mtto'];//this is my css files
for(var i=0; i<js.length; i++){
var js_element = document.createElement('script');
js_element.src = 'js/'+js[i]+'.js?x='+time.getTime();
document.head.appendChild(js_element);
}
for(var i=0; i<style.length; i++){
var importedStyle = document.createElement('link');
importedStyle.rel = 'stylesheet';
importedStyle.href = ''+style[i]+'.css?x='+time.getTime();
document.head.appendChild(importedStyle);
}
</script>
推荐阅读
- java - Jsonpath 在 Spring Boot Test 中为嵌套的 JSON 对象返回 null
- asynchronous - 如何结束(完成)基于另一个无限流创建的 async* 流?
- excel - 根据两个条件查找最大值,然后写入单元格
- scala - 如何将文件夹及其内容添加到 Playframework 和 Heroku 的标准路径?
- symfony - Twig 表单模板:无法从“Symfony\Component\Form\FormView”访问 PersistentCollection 属性。Symfony 4
- netsuite - 通过按钮创建 NetSuite 高级 PDF
- r - R基于匹配的嵌套列表名称对嵌套列表元素应用函数
- python - Python - 打开带有空格的文件时遇到问题
- android - 使用 Jetpack 传输数据
- javascript - 如何在 typescript 中使用没有额外 div 的 createPortal?