近几个月来的工作是一个交易系统持续改进项目迭代发布周期大约为~周最近一次迭代是V版在礼拜三完成发布不幸的是第二天上午就被老大逮过去原来老大从生产中揪出了一个bug大致的问题如下
系统中有一个常用的自定义控件目的是协助选择客户而V版的持续改进需求是给控件增加两个筛选选项支持不同的默认值配置很简单的一个需 求代码修改也简单其中一个修改是给一个js文件里边的一个函数增加了一个传入参数用来传递配置值经过RCRTW测试一切都显得很正常不过上 了生产才被发现bug了加载出来的客户明显不正常数目不对也与预期的查询配置不相符
检查控件内部跳转链接发现问题传递的参数明显与预期不符而这个链接则是由上面修改过的JS函数生成因此判定问题是由于客户端缓存了原版JS 文件新函数的调用由旧函数所替换引发的经过清除缓存重新加载页面后这个自定义控件能够正常工作很不幸的是我们是不能通过打电话告诉每一位用 户你需要清除缓存然后才能正常使用这个功能
到此时我才意识到需要一种方法来控件JS的缓存问题否则后续任何涉及JS文件内容的修改都会因为缓存无法获取最新JS文件而导致生产事故
原则上我们是需要在有JS更新的时候才会去重新加载JS文件而不是每次都重新加载因此第一种做法给JS应用地址后添加随机参数是不可取的因为它意味着几乎每次加载页面都会是重新加载JS而不会合理的利用缓存JS但是我们还有第二种更合理的做法如果关注过一些国外网站代码会发现他们通常是在js链接后添加一个版本号参数而不是随机数当js代码发生修改时只需要将版本号加就可以很巧妙的解决通知客户端更新js文件不知道谁是第一个想到这种方法的人不过毫无疑问他是值得我们钦佩的真是一个不错的idea的!
附赠些许代码
<script src="/JavaScript/SelectOpenWindowjs?v=" type="text/javascript"></script>