js文件缓存之版本管理详解


Posted in Javascript onJuly 05, 2013

近几个月来的工作是一个交易系统持续改进项目,迭代发布周期大约为2~3周。最近一次迭代是V16版,在礼拜三完成发布。不幸的是,第二天上午就被老大逮过去。原来老大从生产中揪出了一个bug,大致的问题如下:

系统中有一个常用的自定义控件,目的是协助选择客户,而V16版的持续改进需求是给控件增加两个筛选选项,支持不同的默认值配置。很简单的一个需求,代码修改也简单,其中一个修改是给一个js文件里边的一个函数增加了一个传入参数,用来传递配置值。经过RC、RTW测试,一切都显得很正常,不过上了生产才被发现bug了。加载出来的客户明显不正常、数目不对,也与预期的查询配置不相符。

检查控件内部跳转链接,发现问题,传递的参数明显与预期不符,而这个链接则是由上面修改过的JS函数生成。因此判定问题是由于客户端缓存了原版JS文件,新函数的调用由旧函数所替换引发的。经过清除缓存,重新加载页面后,这个自定义控件能够正常工作。很不幸的是,我们是不能通过打电话告诉每一位用户,你需要清除缓存,然后才能正常使用这个功能。

到此时,我才意识到需要一种方法来控件JS的缓存问题,否则,后续任何涉及JS文件内容的修改,都会因为缓存无法获取最新JS文件,而导致生产事故。

原则上,我们是需要在有JS更新的时候,才会去重新加载JS文件,而不是每次都重新加载,因此第一种做法给JS应用地址后添加随机参数是不可取的,因为它意味着,几乎每次加载页面都会是重新加载JS,而不会合理的利用缓存JS。但是,我们还有第二种更合理的做法,如果关注过一些国外网站代码,会发现,他们通常是在js链接后添加一个版本号参数,而不是随机数,当js代码发生修改时,只需要将版本号加1,就可以很巧妙的解决通知客户端更新js文件。不知道,谁是第一个想到这种方法的人,不过毫无疑问,他是值得我们钦佩的,真是一个不错的idea的!

附赠些许代码:
<script src="../JavaScript/SelectOpenWindow.js?v=1" type="text/javascript"></script>

Javascript 相关文章推荐
用jQuery技术实现Tab页界面之二
Sep 21 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
Mar 14 Javascript
javascript打印输出json实例
Nov 11 Javascript
使用documentElement正确取得当前可见区域的大小
Jul 25 Javascript
js添加绑定事件的方法
May 15 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
Dec 08 Javascript
jQuery内存泄露解决办法
Dec 13 Javascript
php register_shutdown_function函数详解
Jul 23 Javascript
JS实现滚动条触底加载更多
Sep 19 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 Javascript
vue.js+element 默认提示中英文操作
Nov 11 Javascript
微信小程序实现倒计时功能
Nov 19 Javascript
单击复制文字兼容各浏览器的完美解决方案
Jul 04 #Javascript
把input初始值不写value的具体实现方法
Jul 04 #Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
Jul 04 #Javascript
简单实用jquery版三级联动select示例
Jul 04 #Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 #Javascript
js将控件隐藏的方法及display属性介绍
Jul 04 #Javascript
Jquery多选框互相内容交换的实例代码
Jul 04 #Javascript
You might like
PHP开发中常用的8个小技巧
2008/08/27 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
基于ThinkPHP+uploadify+upload+PHPExcel 无刷新导入数据
2015/09/23 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
2017/10/27 jQuery
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
简单谈谈python中的多进程
2016/11/06 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
2020/06/24 Python
python实现简单加密解密机制
2019/03/19 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
python爬取股票最新数据并用excel绘制树状图的示例
2021/03/01 Python
使用spring mvc+localResizeIMG实现HTML5端图片压缩上传的功能
2016/12/16 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
货代行业个人求职简历的自我评价
2013/10/22 职场文书
升国旗仪式主持词
2014/03/19 职场文书
不错的求职信范文
2014/07/20 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
运动会稿件100字
2014/09/24 职场文书
赢在中国观后感
2015/06/02 职场文书
运动会通讯稿100字
2015/07/20 职场文书
高中运动会广播稿
2015/08/19 职场文书