分享一个控制JS 浏览器缓存的解决办法。
JS 缓存的问题一直都是我们又爱又恨的东西。也是我们比较头痛的问题,
一方面为了提高网站响应速度,减少服务器的负担,和节省带宽,将需要将静态资源缓存在客户端,
但是另一方面,当js 文件有改动的时候,如何快速的将客户端缓存的js文件都失效,这是非常头痛的问题。
以至于每次客户反馈问题的时候,我们第一个解决办法都是清理浏览器缓存。
那么如何解决呢。
1. 直接禁止全部的静态文件缓存
在html 头部加上如下代码:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="0">
这样所有的js 文件都不会被缓存。这显然是不可取的。
2.加版本号,在每个js的后面,都加上js 的版本号,
<script src="test.js?v=101"></script>
当某个js文件有变动时,则修改该js文件的版本号。这样就能解决js 没有更新时,能够缓存js文件,有变动的时,也能更新到最新的js的问题。
但是每次js 有变动时,所有引用到改js的地方都得改一遍,这太麻烦了吧。
有办法:
1.创建公共js文件,将所有需要控制的js文件加入到JSHash 里面
//// js files map 本文件可独立运行,无需依赖于其他文件
var strSite = window.location.protocol + "//" + window.location.host + "/"; //// 网站主机头
var JSHash = {
test: { url: strSite + "test.js",type:"javascript", version: "v0001" },
}
function loadJS(keys) {
if (keys) {
for (var i = 0; i < keys.length; i++) {
var jsnode = JSHash[keys[i]];
if(jsnode.type="javascript")
{
document.writeln("<script type=\"text/javascript\" src=\"" + jsnode.url + "?" + jsnode.version + "\"></script>");
}
else
{
document.writeln("<link type="text/css" href=\"" + jsnode.url + "?" + jsnode.version + "\" />");
}
}
}
}
2. 在相关页面引用js 的方改为:loadJS(["test"]);
这样每一次更新的时候,只需要调整相关JS的版本号即可。
分享一个控制JS 浏览器缓存的解决办法。的更多相关文章
- [vuejs] 终端npm run dev 不能自动打开浏览器运行项目解决办法
终端执行: npm run dev 出现: I Your application is running here: http://localhost:8080 但并没有打开浏览器运行项目 解决办法: ...
- javaweb 使用页面模板CSS或者Js修改失效的解决办法(Tomcat缓存问题)
原因是:浏览器的自动缓存机制导致的. 浏览器会自动缓存静态文件以加快访问速度,但是这导致了他不会再从服务器端接收静态文档了,这就导致我在idea里面改的css和js文档,浏览器根本没下载下来. 所以解 ...
- 反复请求某个URL缓存严重解决办法
有2个iframe页面A和B 点击B页面某按钮刷新A,A缓存严重. 后来发现是因为反复请求同样的URL,浏览器就在调用缓存. 解决方法是在URL后添加一个当前时间即可 var url,e=/[?]/g ...
- WebView加载本地html、js文件常见问题及解决办法
声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...
- 小程序Page里的函数比app.js先执行的解决办法
问题描述: 当我们初始化一个小程序时,默认文件 app.js 中有onLaunch函数, onLaunch: function () { console.log("onLaunch" ...
- selenium webdriver启动IE浏览器失败的解决办法
通过selenium webdriver启动IE浏览器失败,报错:selenium.common.exceptions.WebDriverException: Message: Unexpected ...
- rails4 new没有生成prototype.js之类的脚本解决办法
早期版本的rails在新生成程序时会在/public/javascript目录中自动放入若干个js脚本.不过在rails4.2.0中无论是否加-j选项,都不会生成这些脚本文件了.解决办法是安装prot ...
- https网站引用http路径的js和css失效解决办法
Jazzy html 2015-03-26 在https的网站中引用http路径的js或css会导致不起作用,其形如: Html <script src="http://code. ...
- chrome(谷歌)浏览器字体发虚解决办法
chrome(谷歌浏览器)浏览网页时,字体发虚的解决办法: 1.点击chrome里的 “设置” - 外观 - 字体,改为 微软雅黑,该方法测试无效. 2.将系统字体的pingfang字体卸载,完美解决 ...
随机推荐
- spoj687 后缀数组重复次数最多的连续重复子串
REPEATS - Repeats no tags A string s is called an (k,l)-repeat if s is obtained by concatenating k& ...
- hibernate DetachedCriteria实现多表关联查询createAlias的使用
记录本例查询初衷: 有表: 表1,表2,表3 关系 1 many-to-one 2 2 many-to-one 3 结果:要通过表3中的条件反向查询表1中相关的数据 public Page<We ...
- SQL Server 自增字段重置
--- 删除原表数据,并重置自增列 truncate table tablename --truncate方式也可以重置自增字段 --重置表的自增字段,保留数据 DBCC CHECKIDENT (ta ...
- 关于 UINavigationController 的一些知识
1.在 UINavigationController 中,添加一个UITextView,虽然设置self.frame = textView.bounds(从0.0开始),但是系统会自动设置一个cont ...
- 一次性下载CVPR2016的所有文章
wget --no-clobber --convert-links --random-wait -r -p -E -e robots=off -U mozilla http://www.cv-foun ...
- macOS安装「oh my zsh」
目前常用的 Linux 系统和 OS X 系统的默认 Shell 都是 bash,但是真正强大的 Shell 是深藏不露的 zsh, 这货绝对是马车中的跑车,跑车中的飞行车,史称『终极 Shell』, ...
- BZOJ3436 小K的农场
Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个 ...
- css后代选择器(div.class中间不带空格)
如果我要查找<div>上用了.class的元素,查找方法:div.class:中间是不空格的. 以上这种形式为css后代选择器 参考:http://www.w3school.com.cn/ ...
- debian 中新建或调整 swap 空间
调整 swap 空间之前,需要了解下面几个基本操作: 1. swap 空间是根据 /etc/fstab 中的记录挂载的 2. 可以使用 swapoff 临时关闭 swap 空间,同时可以使用 swap ...
- AspectJ获取方法注解的信息
在使用Aspectj获取方法注解信息的时候,可以使用下面的代码片段: /** * Get value of annotated method parameter */ private <T ex ...