關於清理webgame緩存的問題


看看來瀏覽器對刷新的處理方式。以ie為例(安裝的httpwatch)

 

直接請求百度首頁http://www.baidu.com/,看到所請求的資源都是Cache image

上面所謂的直接請求,是直接在地址欄輸入網址,然后回車(有的瀏覽器上有“轉到”按鈕),或者通過超鏈接打開網頁。

 

而刷新則是點擊“刷新”按鈕,或者按F5 /右鍵點擊“刷新”,則會向服務器發起請求並帶上上一次服務器返回的資源修改信息。

image

http的請求頭部里面帶上了If-Modified-Since和If-None-Math(服務器返回的E-Tag標記),關於Last-Modified和E-Tag的區別,可自行谷歌搜索。

 

而強制刷新—Ctrl + F5,則不會帶上上一次請求的信息,所有的資源都向服務器發起一個“全新”的請求,並重新下載資源

image

 image

 

Chrome瀏覽器表現和ie基本上是一致的,唯一比較大的區別在於,直接請求時,它狀態碼依然為200(但是是from cache)。

image

image

這個請求根本就沒有發送出去>_<

 

 

上面分析了:直接訪問、刷新、強制刷新它們之間的區別,現在講一下,我所經歷的項目中(webgame)所遇到的問題。

 

早些年的時候,做網頁基本上都是asp,如今是php占據了半壁江山。近幾年,主流的webgame前台表現主要采用flex/as3,后端開發語言主要有:java、php、c++,還有一些是用其它語言的,但並不是主流。而游戲一般是獨立的游戲服務器,與網站的web服務器是分開的,充值、登錄、注冊可能都是分開的。

 

一般進入游戲,先登錄網站,然后點擊一個游戲鏈接,跳轉到一個動態請求接口,這個接口根據剛才提交過來的參數,然后輸出一些參數(有資源的版本號,還有session信息、游戲內鏈接的網址,請求資源的cdn地址…),然后加載swf,傳入相應的參數。

 

基本上所有的游戲資源都走的是cdn(除一些特殊的配置文件,需要動態更新外--不停服),而CDN最麻煩的就是要解決緩存的問題,就是需要請求最新的文件內容覆蓋已有的緩存。而as3的請求里面,是不能設置一些http頭信息的,比如 If-Modified-Since、Cache-control等等…后來看到QQ空間有類似的一個“服務”,就是利用ajax,發起get請求,只是在頭部里面寫If-Modified-Since,來更新緩存文件內容。

   1: xhr.onreadystatechange = function() {
   2:     if (xhr.readyState == 4) {
   3:         var s = xhr.status;
   4:         xhr.abort();
   5:  
   6:         if (s == 200) {
   7:             callback(true);
   8:         } else {
   9:             callback(s);
  10:         }
  11:     }
  12: }
  13: xhr.open('GET', url);
  14: xhr.setRequestHeader('If-Modified-Since', new Date(0).toGMTString());
  15: //xhr.setRequestHeader('content-type', 'text/plain');
  16: //xhr.setRequestHeader('Accept-Charset', '');
  17: xhr.setRequestHeader('Cache-Control', 'no-cache');
  18:  
  19: xhr.send(null);

 

把頁面放到cdn上(避免跨域請求出現不必要的麻煩),根據游戲加載的資源和版本號控制文件,組合成游戲加載的資源路徑,然后通過ajax進行請求資源,並顯示更新結果…

 image

image

 

 

最后整理一下,收集到的關注清空瀏覽器緩存的指南:

 

http://ctc.qzs.qq.com/qzone/vas/app/app_canvas/clinic.htm

 

清空常用瀏覽器緩存的操作(沒有寫360 ~ ~!,其實用360的用戶還蠻多的)

IE:        http://ctc.qzs.qq.com/qzone/vas/app/app_canvas/browser/ie.htm

Chrome:    http://ctc.qzs.qq.com/qzone/vas/app/app_canvas/browser/chrome.htm

firefox:    http://ctc.qzs.qq.com/qzone/vas/app/app_canvas/browser/firefox.htm

Safari:    http://ctc.qzs.qq.com/qzone/vas/app/app_canvas/browser/safari.htm

Opera:        http://ctc.qzs.qq.com/qzone/vas/app/app_canvas/browser/opera.htm

QQBrower:    http://qzonestyle.gtimg.cn/qzone/vas/app/app_canvas/browser/qb.htm

 

QZone小診所:    http://imgcache.qq.com/qzone/check/   

(檢測flash player是否安裝以及gif動畫是否瀏覽正常,估計很久都沒有更新了,所以里面一些信息和排版還是有些不盡人意的地方)

 

QQ小助手:    http://user.qzone.qq.com/20050606/clinic

魔法卡片小診所:    http://appimg2.qq.com/card/clinic.html

 

提到webgame,不得不提及flash player,但偏偏這玩意就是很讓人疼蛋,經常更新不說,卸載、安裝還有點小麻煩。貼出兩個地址,一般情況下也夠用了,如果遇到了問題,可以發E-mail(博客左上角)給我~

 

Flash Player播放器:    http://get.adobe.com/cn/flashplayer/?no_redirect

Flash Player Debugger版本:    http://www.adobe.com/support/flashplayer/downloads.html

 

網上很多資源已經非常豐富了,比如javascript的HashChange、Cross-Domain和Web Storage這些問題的解決方案已經很多了,很多時候要做的只是怎么樣去好好利用這些資源來解決我們面臨的問題和困難,發明輪子這玩意暫時不太適合我這種小作坊式的開發>_<


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM