关于浏览器缓存,版本更新问题
因为浏览器缓存的原因,如果在发布新版本的时候,如何让客户端的静态文件同步更新。
通常办法:一般都是在js文件引入的时候在末尾带上时间
<script type="text/javascript" src="/static/js/DateUtil.js?t=20170221"></script>
优化思路:在html中动态引入js文件
<script type="text/javascript">
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
var timestamp = new Date().getTime();
var s = '/static/js/config.js?t=' + timestamp;
script.type = 'text/javascript';
script.src = s;
script.onload = function () {
console.info('onload');
loadJS("index");
};
head.appendChild(script);
<#--loadJS("index");-->
</script>
config.js
/**
* Created by User on 2017/2/21.
*/
var JSHash = {
index: [
{url:"/static/js/DateUtil.js", version: "1.0"},
{url:"/static/easyui/js/jquery.easyui.min.js", version: "1.0"}
]
// edit: [{url:"http://xxxx.js", version: "2.0"}]
};
function loadJS(sKey) {
var head = document.getElementsByTagName("head")[0];
var node = JSHash[sKey];
for(var i =0;i < node.length; i ++) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = node[i].url + '?version='+node[i].version;
console.info(script.src);
script.onload = function () {
console.info("node"+i)
};
// document.writeln('<script src="'+node[i].url+'?version='+node[i].version+'"><\/script>');
head.appendChild(script);
}
}
但是这样有一个问题就是js文件载入需要时间,页面在一瞬间调用需要动态载入的js文件函数,报错。
思考:如何引入js版本控制,有什么好办法?