为了避免缓存引起的最新js无法加载,所以需要用timestamp来表示。
1、在<script type="text/javascript" src="/js/common.js" ></script>在后面加一个时间戳来解决。这版样url地址每次变化,浏览器就会请求服务端的js,而不会使用缓存。保证页面每次加载到的都是最新的js文件。
2、还有一种解决方案:
加版本号,js有个版本。如果每次发布新的js代码。后面就会附加新的版本号。然后用户加载html页面的时候。版本号附加在在权
<script type="text/javascript" src="/js/common.js?v=99" ></script>
这样也可以保证js同步加载到最新的版本。
㈡ 在js中或css中加入v=版本号
添加版本号的原因,可能是因为想要强制浏览器不缓存js和css。
1、推荐自动化构工具, webpack之类的,每次写完编译文件,自动生成不同的版本的js,css,当然也有小插件可以做到。
2、就是在?v=时间戳,可以把加载js脚本,统一放在一个js里面 ,声明时间戳。
㈢ 使用requirejs时怎么解决文件版号和增量更新的问题
看你前后端用什么技术了,我知道的大概有3种情况。 在这三种情况之前,首先要说的是requirejs对依赖增加hash的方式是通过参数urlArgs: 'ver='v{version}在require.config统一增加的,就我所知似乎不能单独对每个模块设置 (但可能是我错了),即每次都得批量更新版本号。
1.如果你采用过requirejs,且前后端分离,前端采用yeoman构建,那么只要找到相应的质量高的requirejs的generator,无论是gulp还是grunt, 其yeoman的generator应该已经处理好文件缓存增量更新的问题了。 2.假使前后端分离,前端由gulp/grunt集成,文件版本号增量更新,用下面几个插件就能处理的比较完美: gulp-rev gulp-rev-all gulp-useref (grunt也能找到类似的) 其中gulp-rev,计算文件hash值,gulp-useref对html内特定注解标签下的内容合并重写,gulp-rev-all会考虑css引用图片hash值改变的情况从而更新css文件hash。 等等总之只要去找总能通过gulp/grunt解决这个问题。 3.如果你使用rails(ruby)等前端友好框架,可能会有流行的解决方案,如果不幸用了老旧前端不友好的框架SpringMVC(java),用gulp对jsp重编译比较蛋疼。。我不知道有没有相应的插件,如果没有你只能在后台维持这个版本号变量,对页面所有静态资源添加这个后缀,类似下面的代码:
var require = {
baseUrl: '/Content',
urlArgs: 'ver='+${static_resource_version},
paths: {...},
deps: ['scripts/home/about']
}
<script src="/Content/bower_components/requirejs/require.js?ver=${static_resource_version}" async></script>
其中path之内的所有脚本,以及deps内的入口脚本,都会被追加urlArgs,只是这样还无法达到最理想增量更新就是了。。。 此外,对于文件版本号的后缀args我也推荐使用git commit的hash值。
㈣ 如何自动给CSS、JS添加版本号防止客户端缓存。
怎么说呢,个人有个笨点的办法,就是在代码中加上JS版本号的全局变量,应用内JS时利用后台代码添加。容
这样更改过JS时,将JS的文件名后边带上个自定义的版本号,再将JS版本号的变量修改一下就好了。其他程序由于是动态的读取JS文件名,所以不用再修改,也不用怕漏改。
㈤ html中js文件的版本号如何控制
处理办法:
1.更改css文件名:其实解决这个问题很简单,缓存是通过文件名标记缓存的内容的。在你更新了网站的css文件内容后,在更换一下css的文件名就可以了。如原先html中的css调用语句如下:
<link rel="stylesheet" href=“http://www.example.com/style.css” type="text/css" media="screen" />
改一下css文件名就可以了:
<link rel=“stylesheet” href="http://www.example.com/index.css" type="text/css" media="screen" />
另外一种从更改css文件名的方法是将版本号写到文件名中,如:
<link rel="stylesheet" href="http://www.example.com/index.v2011.css" type="text/css" media="screen"/>
css文件更新后,改一下文件名中的版本号即可:
<link rel="stylesheet" href="http://www.example.com/index.v2012.css" type="text/css" media="screen"/>
2.给css文件加个版本号:其实每次修改css文件后还要修改css的文件名有点麻烦,那么我们可以在加载css语句中加入个版本号(即css链接中?后面的内容)就可以了。如原先html中的css调用语句如下:
<link rel="stylesheet" href=“http://www.example.com/style.css?v=2011”type="text/css" media="screen"/>
改一下css文件的版本号改成2012就可以了:
<link rel="stylesheet" href=“http://www.example.com/style.css?v=2012”type="text/css" media="screen"/>
总结:
其实css文件后面的问号起不到实际作用,仅能当作后缀,如果用问号加参数的方法,可以添加版本号等信息,同时可以刷新一下浏览器端的缓存。一个小小的细节,带来很大的方便。
㈥ js 后跟version 后台怎么控制version
给js加版本号,是一种很畸形的设计。说实话,html版本的变化才是关键。js的修改其实对应的html要做新版本才对。
如果非要有,可以考虑设置一个全局的常量,记录服务启动的时间值:
public final static SYSTEM_STARUP_TIME = System.currentTimeMillis();
界面直接使用:
<script type="text/javascript" src="/js/2011/oschina.js?<%=SYSTEM_STARUP_TIME %>"></script>
这样,你要控制版本,只要把你的程序重启一下,世界从此清静了。
㈦ 【浏览器缓存问题】HTML静态文件中,css和js可以添加版本号来刷新缓存,但是只是修改的文字了呢
给网址后面添加一个随机数(或者是任意的字符串)即可,比如原来的网址是这样的回:
http....../.../1.htm
改为
http....../.../1.htm?1234
即可(注意问号不答能省)。
浏览器是根据网址来缓存的,所以只要给网址接个尾巴,浏览器就会认为是新网址,就会从网上重新下载数据了。当然,如果下次再次改变了网页内容,这个尾巴就要再次修改。
给css和js添加所谓版本号其实也是同一个原理。这个版本号其实就是给css和js的网址接个尾巴而已。
这个也同样适用网页里面的图片、音乐等资源,事实上只要是http协议的元素都可以利用这个办法来避开缓存实时刷新。