浏览器缓存导致FLASH资源更新问题的解决方案
?
在網(wǎng)上搜瀏覽器緩存問題時(shí),遇上了很多問題。一是不知道應(yīng)該用何種關(guān)鍵字搜索,二是一搜出來,就全是講的是如何禁用瀏覽器緩存的方案。
?
作為大型點(diǎn)的FLASH WEBGAME來說,不緩存顯然是不行的。總體上來說,我們要想達(dá)到的目標(biāo)就是
一、瀏覽器需要緩存
二、當(dāng)服務(wù)器資源更新時(shí),瀏覽器緩存里相應(yīng)的老版本資源失效。
?
下面兩篇文章講到了一個(gè)很好的解決方案,并且給出了源碼。。
?
更新文件避免瀏覽器緩存的解決方案(基于svn)
?
http://www.itamt.com/2010/06/browser_cache_prevent_base_on_svn/
?
?
更新文件避免瀏覽器緩存的解決方法(源碼)
?
http://www.itamt.com/2010/07/file-revision-prevent-browser-cache-svn/#comment-163
?
?
由于作者BLOG上的代碼無法下載,并且作者的實(shí)現(xiàn)與第一篇中描述的略有差異,于是我試著留言給作者。熱心的作者當(dāng)天就給了我回復(fù)。
以下是我整理后的回復(fù)內(nèi)容:
你好, 關(guān)于你說的:
1 、你最后的方案是不是 僅僅在資源請(qǐng)求時(shí),追加一個(gè)版本號(hào)?? 我發(fā)現(xiàn)IE瀏覽器緩存是將整個(gè)請(qǐng)求URL緩存下來了的。也就是說,版本號(hào)也緩存了。 這樣,當(dāng)我們使用版本號(hào)請(qǐng)求資源時(shí),就可以實(shí)現(xiàn)總是得到服務(wù)器上的資源了。
2、IE和Firefox的緩存機(jī)制差異有多大?? 主要是緩存后的URL路徑上。。。
我把我的想法說一下, 盡量表述清楚-_-:
不管IE和Firefox瀏覽器緩存都是將整個(gè)請(qǐng)求url緩存下來的. 而我的解決方案本質(zhì)與你說的是一樣的, 即"僅僅在資源請(qǐng)求時(shí),追加一個(gè)版本號(hào)".
一般的做法,發(fā)布新版本時(shí),比如v1.5,我們大可以在所有資源請(qǐng)求都加上"....?v=1.5", 這樣做沒有錯(cuò).肯定是會(huì)避免瀏覽器緩存的.
問題是:這種方法會(huì)重新請(qǐng)求所有的資源. 而項(xiàng)目發(fā)布的通常情況是:只有少部分資源有修改. 所以這種方法是很浪費(fèi)帶寬的, 也加重了服務(wù)器的壓力. 理想的情況就是:只重新請(qǐng)求那些被修改過的資源.
下面表述一下我的解決方案:
假設(shè)現(xiàn)在項(xiàng)目是v1.0, 我們要發(fā)布v1.5上去. 我們利用SVN產(chǎn)生一份文件, 來記錄v1.5中所有資源的SVN版本號(hào). 當(dāng)請(qǐng)求一個(gè)資源時(shí), 追加這個(gè)資源的SVN版本號(hào). 如果一個(gè)資源(比如: icon.jpg, SVN版本號(hào)是1010)在v1.5中沒有被修改, 那么它的SVN版本號(hào)與在v1.0的SVN版本號(hào)肯定是一樣的都是1010:
在v1.0中,瀏覽器請(qǐng)求icon.jpg的url是:http://.....icon.jpg?svn=1010
在v1.5中,瀏覽器請(qǐng)求icon.jpg的url是:http://.....icon.jpg?svn=1010, 這時(shí)候會(huì)直接從瀏覽器緩存中取出. 不會(huì)重新請(qǐng)求.
如果v1.5中一個(gè)資源(比如: logo.jpg, SVN版本號(hào)是1234)是修改過的, 它在v1.0的SVN版本號(hào)是1222, 請(qǐng)求資源時(shí):
在v1.0中,瀏覽器請(qǐng)求icon.jpg的url是:http://.....logo.jpg?svn=1222
在v1.5中,瀏覽器請(qǐng)求icon.jpg的url是:http://.....logo.jpg?svn=1234, 這時(shí)候與瀏覽器緩存中的請(qǐng)求是不一樣的. 所以會(huì)重新向服務(wù)端請(qǐng)求.
思路就是這樣的. 所以關(guān)鍵是利用SVN來記錄的版本號(hào)請(qǐng)求資源.
這個(gè)解決方案最終實(shí)現(xiàn)出來主要是兩個(gè)文件.
1.cur.txt記錄整個(gè)項(xiàng)目當(dāng)前的SVN版本號(hào).
2.revision.txt記錄項(xiàng)目當(dāng)前版本中所有資源的SVN版本號(hào).
整個(gè)項(xiàng)目程序一開始(Preloader.swf), Preloader.swf會(huì)先確定整個(gè)項(xiàng)目SVN版本號(hào)(加載最新cur.txt, 或者在網(wǎng)頁中指定:...Preloader.swf?cur=20), 然后根據(jù)整個(gè)項(xiàng)目SVN版本號(hào)加載revision.txt, 比如現(xiàn)在項(xiàng)目SVN版本是20, 那么Preloader.swf會(huì)加載:
http://.....revision.txt?svn=20
加載完成后, 就可以完成mFileRevisionManager的初始化...
注意Preloader.swf不是進(jìn)度條(load.swf), 它是整個(gè)項(xiàng)目最開始的地方, 所以應(yīng)該盡可能小, 而且一旦完成最不要再去修改它.
附件里,有我做的demo. 我的開發(fā)環(huán)境是FDT4.5+Flash CS5.5, 文件夾tool里一個(gè)ant腳本, 和jsfl腳本. 使用時(shí)你需要修改publish.xml開頭的路徑. 然后運(yùn)行這個(gè)ant腳本.
?
運(yùn)行ant前, 注意設(shè)置下:這樣ant運(yùn)行期間的輸出信息會(huì)顯示在eclipse里.
?
---------------------------------------------------------------
并且,我問了一下他對(duì)Preloader.swf的理解和用法
回復(fù):
結(jié)合我參與的項(xiàng)目,說一下Preloader.swf是干么用的:
一般項(xiàng)目肯定會(huì)有一個(gè)load.swf和main.swf, 其中
1.load.swf用于顯示加載main.swf的進(jìn)度,說白了load.swf就是個(gè)進(jìn)度條.
2.main.swf就是整個(gè)項(xiàng)目的主程序.
而Preloader.swf是在load.swf之前加載的.也就是說加載順序是Preloader.swf->load.swf->main.swf
Preloader.swf主要用來加載"資源版本號(hào)文件"(revision.txt, cur.txt). 并且把整個(gè)資源版本機(jī)制初始化(在我的方案里就是mFileRevisionManager).
當(dāng)然, 也完全可以把Preloader.swf并入load.swf(進(jìn)度條)中. 但我的經(jīng)驗(yàn)是load.swf(進(jìn)度條)其實(shí)是經(jīng)常需要修改更新的. 而且為了重用性考慮, 我會(huì)把Preloader.swf用于不同的項(xiàng)目中. 所以把Preloader.swf與load.swf分開.
?
?
-----------------------------分割線--------------------------------
而考慮到目前項(xiàng)目的原因,我們決定暫時(shí)采用一個(gè)很簡(jiǎn)單的方案。 就是在資源的根目錄下加版本號(hào)。
比如 1.0.0版本的資源目錄為
Assets_v1.0.0
我要加載一個(gè)ui.swf的URL就是? “Assets_v1.0.0/ui.swf”
而當(dāng)版本更新時(shí),比如到了1.0.1
我要加載一個(gè)ui.swf的URL就是 “Assets_v1.0.1/ui.swf”
?
這樣就像回復(fù)內(nèi)容中說的,這會(huì)使瀏覽器緩存中所緩存的所有資源都失效。 雖然是如此,但總比用戶繼續(xù)使用老版本資源好。 并且,對(duì)于一個(gè)發(fā)布版的更新總會(huì)有時(shí)間間隔的,不會(huì)一天到晚都是這樣的情況。
而待項(xiàng)目趨于穩(wěn)定后,再集中替換成上面那種最小資源更新的解決方案。
?
?
希望上面的信息能夠幫助到和我一樣迷惑的人。如果這些信息幫助到了你,請(qǐng)去參拜本文開頭引用的兩篇文章的作者,謝謝!!!!!!
轉(zhuǎn)載于:https://www.cnblogs.com/qilinzi/archive/2011/10/12/2209493.html
總結(jié)
以上是生活随笔為你收集整理的浏览器缓存导致FLASH资源更新问题的解决方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 投影仪灯泡价格大概是多少钱,如何选购投影
- 下一篇: 黄山风景区二日游攻略