分享一个控制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的版本号即可。

        

        

 

时间: 2024-12-24 06:57:40

分享一个控制JS 浏览器缓存的解决办法。的相关文章

body-百度分享 qzone不显示内容有什么解决办法吗

问题描述 百度分享 qzone不显示内容有什么解决办法吗 <a class="bds_qzone" data-cmd="qzone"></a> <a class="bds_tsina" data-cmd="tsina"></a> <a class="bds_baidu" data-cmd="baidu"></a> &

uc浏览器闪退解决办法

  最近,不少uc浏览器用户在更新到最新版本后,都遇到了闪退的情况.那uc浏览器为什么闪退?让小编给大家说明一下uc浏览器闪退原因并跟大家分享uc浏览器闪退解决办法吧! uc浏览器闪退怎么办 uc浏览器闪退原因说明: 1.App版本的兼容性问题 解决办法:这样就必须更新这个APP,或者直接从本站重新下载最新版即可. 2.后台程序运行太多导致内存不足 苹果的优点是速度快,系统运行流畅性好.但是苹果内存是机身自带,容量有限,特别是打开的程序太多的时候,这时后台程序太多内存出现不足时就会出现闪退现象.

chrome浏览器没声音解决办法

  解决办法: 1.点击桌面右下角的扬声器图标; 2.点击"合成音(X)"; 3.发现Google Chrome竟然被静音了; 4.点击"静音图标"按钮,再次使用Chrome播放音乐,就正常了! 有朋友说,这个办法不管用,点击了"静音图标"按钮后,一秒钟后就又自动静音了. 我找了一下,发现竟然是chrome的一个叫"快捷工具"插件的问题,它有一个页面静音功能. 可能是无意中按了alt+w的组合键,让Chrome浏览器静音了.点

eclipse使用maven时共享Nexus仓库index缓存的解决办法

不完全解决,但相对有效. 背景 如果你的eclipse管理maven依赖时无法搜索出结果? 如我现有一个常用的项目工作空间目录为: /Users/pollyduan/Documents/workspace 工作目录中的仓库index缓存保存在哪里呢? ${basedir}/.metadata/.plugin/org.eclipse.m2e.core/ 在使用一段时间以后,该目录会膨胀的很严重,比如我现在该目录的大小是1.8G. 如果我再创建一个工作空间,如:/Users/pollyduan/Do

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

    早期版本的rails在新生成程序时会在/public/javascript目录中自动放入若干个js脚本.不过在rails4.2.0中无论是否加-j选项,都不会生成这些脚本文件了.解决办法是安装prototype-rails gem,然后将其安装目录中的/vendor/assets/javascripts目录中的n个脚本拷入程序下的/public/javascript目录中.    然后可以在html.erb中嵌入: <%= javascript_include_tag "proto

请教大神 我这个错误是怎么回事啊?加上jsp-api.jar报一个错误,不加报另一个错误,在线跪求解决办法啊

问题描述 不加报这个错误加上报这个错误 解决方案 解决方案二:求大神速度来啊解决方案三:版本冲突第一个说你的某些Annotation没有定义第二个错误里standard-1.1.2.jar没有包含TLD,你去换一个包解决方案四:首先你得PageContext对象找不到,看看你是否引入包,或者是有没有这么类其次,你得tld文件找不到,看看你是否加入到了classpath中去,如果没有,加入试一试,如果加入了,还是出现这个问题,换一个包试一试呢!解决方案五:引用2楼holzkoepfer的回复: 版

jquery $.Ajax 火狐浏览器闪屏解决办法

jquery的async:false,这个属性 默认是true:异步,false:同步.  代码如下 复制代码 $.ajax({           type: "post",           url: "path",       cache:false,       async:false,      dataType: ($.browser.msie) ? "text" : "xml",           succe

分享PHPCMS出现无法登录、注册解决办法

环境: 操作系统:Linux 服务器软件:nginx/1.1.16PHP/5.3.27 MySQL 版本:5.5.34-log PHPCMS程序版本:Phpcms V9.5.7 Release 20140625 问题: 本地:本地调试一切正常 服务器上:PHPCMS中PHPSSO通信成功,无法进行账号注册.登录,通过跟踪代码发现下面代码中返回的的$fp为空值 $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeou

js 判断一个变量是否为数组完美解决办法

前端开发中,在做项目的时候,我们经常需要对一个变量进行数组类型的判断,当然即使你暂时没遇到,但是这个问题也是大家去面试时的高频问题,有必要拿出来说一说. 大家都知道js中可以使用typeof来判断变量的基本类型,如:  代码如下 复制代码 alert(typeof '111'); // "string" alert(typeof 22); // "number" alert(typeof a); // "undefined" alert(type