js文件緩存之版本管理詳解
近幾個(gè)月來(lái)的工作是一個(gè)交易系統(tǒng)持續(xù)改進(jìn)項(xiàng)目,迭代發(fā)布周期大約為2~3周。最近一次迭代是V16版,在禮拜三完成發(fā)布。不幸的是,第二天上午就被老大逮過去。原來(lái)老大從生產(chǎn)中揪出了一個(gè)bug,大致的問題如下:
系統(tǒng)中有一個(gè)常用的自定義控件,目的是協(xié)助選擇客戶,而V16版的持續(xù)改進(jìn)需求是給控件增加兩個(gè)篩選選項(xiàng),支持不同的默認(rèn)值配置。很簡(jiǎn)單的一個(gè)需求,代碼修改也簡(jiǎn)單,其中一個(gè)修改是給一個(gè)js文件里邊的一個(gè)函數(shù)增加了一個(gè)傳入?yún)?shù),用來(lái)傳遞配置值。經(jīng)過RC、RTW測(cè)試,一切都顯得很正常,不過上了生產(chǎn)才被發(fā)現(xiàn)bug了。加載出來(lái)的客戶明顯不正常、數(shù)目不對(duì),也與預(yù)期的查詢配置不相符。
檢查控件內(nèi)部跳轉(zhuǎn)鏈接,發(fā)現(xiàn)問題,傳遞的參數(shù)明顯與預(yù)期不符,而這個(gè)鏈接則是由上面修改過的JS函數(shù)生成。因此判定問題是由于客戶端緩存了原版JS文件,新函數(shù)的調(diào)用由舊函數(shù)所替換引發(fā)的。經(jīng)過清除緩存,重新加載頁(yè)面后,這個(gè)自定義控件能夠正常工作。很不幸的是,我們是不能通過打電話告訴每一位用戶,你需要清除緩存,然后才能正常使用這個(gè)功能。
到此時(shí),我才意識(shí)到需要一種方法來(lái)控件JS的緩存問題,否則,后續(xù)任何涉及JS文件內(nèi)容的修改,都會(huì)因?yàn)榫彺鏌o(wú)法獲取最新JS文件,而導(dǎo)致生產(chǎn)事故。
原則上,我們是需要在有JS更新的時(shí)候,才會(huì)去重新加載JS文件,而不是每次都重新加載,因此第一種做法給JS應(yīng)用地址后添加隨機(jī)參數(shù)是不可取的,因?yàn)樗馕吨?,幾乎每次加載頁(yè)面都會(huì)是重新加載JS,而不會(huì)合理的利用緩存JS。但是,我們還有第二種更合理的做法,如果關(guān)注過一些國(guó)外網(wǎng)站代碼,會(huì)發(fā)現(xiàn),他們通常是在js鏈接后添加一個(gè)版本號(hào)參數(shù),而不是隨機(jī)數(shù),當(dāng)js代碼發(fā)生修改時(shí),只需要將版本號(hào)加1,就可以很巧妙的解決通知客戶端更新js文件。不知道,誰(shuí)是第一個(gè)想到這種方法的人,不過毫無(wú)疑問,他是值得我們欽佩的,真是一個(gè)不錯(cuò)的idea的!
附贈(zèng)些許代碼:
<script src="../JavaScript/SelectOpenWindow.js?v=1" type="text/javascript"></script>
相關(guān)文章
javascript基礎(chǔ)之?dāng)?shù)據(jù)類型詳解
這篇文章主要介紹了如何理解JavaScript中的數(shù)據(jù)類型,幫助大家更好的學(xué)習(xí)JavaScript,感興趣的朋友可以了解下2021-11-11
JavaScript基礎(chǔ)知識(shí)點(diǎn)歸納(推薦)
下面小編就為大家?guī)?lái)一篇JavaScript基礎(chǔ)知識(shí)點(diǎn)歸納(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2016-07-07
JavaScript中prototype為對(duì)象添加屬性的誤區(qū)介紹
prototype為對(duì)象添加屬性的的過程中有些誤區(qū),在本文將為大家詳細(xì)介紹下,感興趣的朋友可不要錯(cuò)過2013-10-10
JavaScript中document.referrer的用法詳解
這篇文章主要給大家介紹了關(guān)于JavaScript中document.referrer的用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07

