近幾個月來的工作是一個交易系統持續改進項目 迭代發布周期大約為 ~ 周 最近一次迭代是V 版 在禮拜三完成發布 不幸的是 第二天上午就被老大逮過去 原來老大從生產中揪出了一個bug 大致的問題如下
系統中有一個常用的自定義控制項 目的是協助選擇客戶 而V 版的持續改進需求是給控納亮件增加兩個篩選選項 支持不同的默認值配置 很簡單的一個需 求 代碼修改也簡單 其中一個修改是給一個js文件里邊的一個函數增加了一個傳入參數 用來傳遞配置值 經過RC R測試 一切都顯得很正常 不過上 了生產才被發現bug了 載入出來的客戶明顯不正常 數目不對 也與預期的查詢配置不相符
判茄森檢查控制項內部跳轉鏈接 發現問題 傳遞的參數明顯與預期不符 而這個鏈接則是由上面修改過的JS函數生成 因此判定問題是由於客戶端緩存了原版JS 文件 新函數的調用由舊函數所替換引發的 經過清除緩存 重新載入頁面後 這個自定義控制項能夠正常工作 很不幸的是 我們是不能通過打電話告訴每一位用 戶 你需要清除緩存 然後才能正常使用這個功能
掘畝到此時 我才意識到需要一種方法來控制項JS的緩存問題 否則 後續任何涉及JS文件內容的修改 都會因為緩存無法獲取最新JS文件 而導致生產事故
原則上 我們是需要在有JS更新的時候 才會去重新載入JS文件 而不是每次都重新載入 因此第一種做法給JS應用地址後添加隨機參數是不可取的 因為它意味著 幾乎每次載入頁面都會是重新載入JS 而不會合理的利用緩存JS 但是 我們還有第二種更合理的做法 如果關注過一些國外網站代碼 會發現 他們通常是在js鏈接後添加一個版本號參數 而不是隨機數 當js代碼發生修改時 只需要將版本號加 就可以很巧妙的解決通知客戶端更新js文件 不知道 誰是第一個想到這種方法的人 不過毫無疑問 他是值得我們欽佩的 真是一個不錯的idea的!
lishixin/Article/program/Java/JSP/201311/20638
2. js清理手機緩存
在JavaScript中清除手機緩存的方法並不是直接使用JavaScript代碼就能完成的,因為JavaScript自身不具備清除緩存的能力,需廳扮要通過一些特定的API來實現。
可以通過以下步驟清除手機緩存:
1. 使用HTML5中的應用程序緩存(Application Cache)來緩存部分頁面和資源文件,當然,緩存的數據也可以隨時被清除。
2. 使用瀏覽器提供的緩存清除API。不同的瀏宴伏斗覽器提供不同的API來清除緩存,例如Chrome瀏覽器提供了chrome.browsingData.clear API介面,可以通過該介面來清除瀏晌磨覽器緩存。
需要注意的是,清除緩存會導致部分數據丟失,同時清除緩存的方法也因不同的瀏覽器和操作系統而異,所以在具體實現時要仔細查看相關文檔並謹慎操作。