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 浏览器缓存的解决办法。的更多相关文章

  1. [vuejs] 终端npm run dev 不能自动打开浏览器运行项目解决办法

    终端执行: npm run dev 出现: I Your application is running here: http://localhost:8080 但并没有打开浏览器运行项目 解决办法: ...

  2. javaweb 使用页面模板CSS或者Js修改失效的解决办法(Tomcat缓存问题)

    原因是:浏览器的自动缓存机制导致的. 浏览器会自动缓存静态文件以加快访问速度,但是这导致了他不会再从服务器端接收静态文档了,这就导致我在idea里面改的css和js文档,浏览器根本没下载下来. 所以解 ...

  3. 反复请求某个URL缓存严重解决办法

    有2个iframe页面A和B 点击B页面某按钮刷新A,A缓存严重. 后来发现是因为反复请求同样的URL,浏览器就在调用缓存. 解决方法是在URL后添加一个当前时间即可 var url,e=/[?]/g ...

  4. WebView加载本地html、js文件常见问题及解决办法

    声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...

  5. 小程序Page里的函数比app.js先执行的解决办法

    问题描述: 当我们初始化一个小程序时,默认文件 app.js 中有onLaunch函数, onLaunch: function () { console.log("onLaunch" ...

  6. selenium webdriver启动IE浏览器失败的解决办法

    通过selenium webdriver启动IE浏览器失败,报错:selenium.common.exceptions.WebDriverException: Message: Unexpected ...

  7. rails4 new没有生成prototype.js之类的脚本解决办法

    早期版本的rails在新生成程序时会在/public/javascript目录中自动放入若干个js脚本.不过在rails4.2.0中无论是否加-j选项,都不会生成这些脚本文件了.解决办法是安装prot ...

  8. https网站引用http路径的js和css失效解决办法

    Jazzy  html  2015-03-26 在https的网站中引用http路径的js或css会导致不起作用,其形如: Html <script src="http://code. ...

  9. chrome(谷歌)浏览器字体发虚解决办法

    chrome(谷歌浏览器)浏览网页时,字体发虚的解决办法: 1.点击chrome里的 “设置” - 外观 - 字体,改为 微软雅黑,该方法测试无效. 2.将系统字体的pingfang字体卸载,完美解决 ...

随机推荐

  1. spoj687 后缀数组重复次数最多的连续重复子串

    REPEATS - Repeats no tags  A string s is called an (k,l)-repeat if s is obtained by concatenating k& ...

  2. hibernate DetachedCriteria实现多表关联查询createAlias的使用

    记录本例查询初衷: 有表: 表1,表2,表3 关系 1 many-to-one 2 2 many-to-one 3 结果:要通过表3中的条件反向查询表1中相关的数据 public Page<We ...

  3. SQL Server 自增字段重置

    --- 删除原表数据,并重置自增列 truncate table tablename --truncate方式也可以重置自增字段 --重置表的自增字段,保留数据 DBCC CHECKIDENT (ta ...

  4. 关于 UINavigationController 的一些知识

    1.在 UINavigationController 中,添加一个UITextView,虽然设置self.frame = textView.bounds(从0.0开始),但是系统会自动设置一个cont ...

  5. 一次性下载CVPR2016的所有文章

    wget --no-clobber --convert-links --random-wait -r -p -E -e robots=off -U mozilla http://www.cv-foun ...

  6. macOS安装「oh my zsh」

    目前常用的 Linux 系统和 OS X 系统的默认 Shell 都是 bash,但是真正强大的 Shell 是深藏不露的 zsh, 这货绝对是马车中的跑车,跑车中的飞行车,史称『终极 Shell』, ...

  7. BZOJ3436 小K的农场

    Description 背景 小K是个特么喜欢玩MC的孩纸... 描述 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得 一些含糊的信息(共m个 ...

  8. css后代选择器(div.class中间不带空格)

    如果我要查找<div>上用了.class的元素,查找方法:div.class:中间是不空格的. 以上这种形式为css后代选择器 参考:http://www.w3school.com.cn/ ...

  9. debian 中新建或调整 swap 空间

    调整 swap 空间之前,需要了解下面几个基本操作: 1. swap 空间是根据 /etc/fstab 中的记录挂载的 2. 可以使用 swapoff 临时关闭 swap 空间,同时可以使用 swap ...

  10. AspectJ获取方法注解的信息

    在使用Aspectj获取方法注解信息的时候,可以使用下面的代码片段: /** * Get value of annotated method parameter */ private <T ex ...