『壹』 【浏览器缓存问题】HTML静态文件中,css和js可以添加版本号来刷新缓存,但是只是修改的文字了呢
给网址后面添加一个随机数(或者是任意的字符串)即可,比如原来的网址是这样的回:
http....../.../1.htm
改为
http....../.../1.htm?1234
即可(注意问号不答能省)。
浏览器是根据网址来缓存的,所以只要给网址接个尾巴,浏览器就会认为是新网址,就会从网上重新下载数据了。当然,如果下次再次改变了网页内容,这个尾巴就要再次修改。
给css和js添加所谓版本号其实也是同一个原理。这个版本号其实就是给css和js的网址接个尾巴而已。
这个也同样适用网页里面的图片、音乐等资源,事实上只要是http协议的元素都可以利用这个办法来避开缓存实时刷新。
大型网站通常都有一套比较成熟的自动化部署工具。
在项目发布前,使用该工具进行专部署代码。属工具会自动地帮完成资源压缩、代码打包、添加版本号、解决执行依赖等问题。
给站一个版本号就行了,服务端输出到JS尾部。更新JS的时候,修改下版本号就行了。
『叁』 如何自动给CSS、JS添加版本号防止客户端缓存。
怎么说呢,个人有个笨点的办法,就是在代码中加上JS版本号的全局变量,应用内JS时利用后台代码添加。容
这样更改过JS时,将JS的文件名后边带上个自定义的版本号,再将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添加版本号
给CSS、JS添加版抄本号可以防止客户袭端缓存。
比如:<script src="001.js?2015120710"></script>
001.js?2015120710 ?后面的2015120710是当前js的日期。
如果自动添加,建议还是以日期作为版本号,当然也可以通过程序随机生成一组数字或字符。
『陆』 一个js文件里面给该js文件加上版本号能消除缓存吗
应该是js文件外面版加权
<script id="main"></script>
<script type="text/javascript">
var js = document.getElementById('main');
js.src = 'main.js?v='+ new Date().getTime();
</script>
『柒』 sass构建CSS时,如何给文件随机加版本号,以防止老文件缓存
假设是在SASS编译阶段生成随机文件名,在模板文件如何引用一个确定的静态文件资源呢?
所以应该在发布阶段去解析模板文件中的静态资源,采用一定策略来生成文件名或版本号,一般采用两种办法:
1.在模板文件引用静态资源的时候做处理,加一个过滤器;
2.发布时检索文件中的link和script,改变文件名;
至于随机数的策略就无所谓了,时间戳,文件MD5之类的都行,时间戳的好处是简单暴力,坏处是客户端的缓存在每次发布后都会无效,MD5的方法会更有效,但是这意味着发布时需要前端和后台的模板代码最好在一台服务器上,不然读取文件做MD5运算会很麻烦;
另外就是如果不是跟后缀的模式,需要配置nginx(假设的服务器是nginx)或者做一个controller来专门解析资源了。
『捌』 如何引用js文件加随机数
<script type="text/javascript">
document.write("<s" + "cript type='text/javascript' src='x.js?" + Math.random() + "'></s" + "cript>");
</script>
『玖』 在js中或css中加入v=版本号
添加版本号的原因,可能是因为想要强制浏览器不缓存js和css。
1、推荐自动化构工具, webpack之类的,每次写完编译文件,自动生成不同的版本的js,css,当然也有小插件可以做到。
2、就是在?v=时间戳,可以把加载js脚本,统一放在一个js里面 ,声明时间戳。