<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    龍行天下

      政 博
    隨筆 - 23, 文章 - 0, 評(píng)論 - 12, 引用 - 0
    數(shù)據(jù)加載中……

    怎么避免瀏覽器緩存靜態(tài)文件

    對(duì)于動(dòng)態(tài)文件,比如 index.asp?id=...  或者 index.aspx?id=... 相信有經(jīng)驗(yàn)的程序員都知道怎樣禁止瀏覽器緩存數(shù)據(jù)了.
    但是對(duì)于靜態(tài)文件(css,jpg,gif等等), 在什么場(chǎng)合下面我們需要禁止瀏覽器緩存他們,怎么做?

    本文討論的主題是如何防緩存, 尤其是如何防止靜態(tài)文件被緩存..


    在  RE:對(duì)博客園URL的一些調(diào)整建議, 二級(jí)域名不利于客戶端瀏覽器緩存 一文中,我提到了怎么最大化的
    利用瀏覽器緩存功能,來(lái)提高客戶端瀏覽速度, 減輕服務(wù)器負(fù)擔(dān)的.

    但是事物總是一分為二的,并不是所有的場(chǎng)合都要使用緩存的. 有時(shí)候我們的數(shù)據(jù)被緩存了反而會(huì)給我們帶來(lái)麻煩.

    對(duì)于動(dòng)態(tài)數(shù)據(jù)(從數(shù)據(jù)庫(kù)讀取生成的那些),我們可以通過(guò)以下方法來(lái)禁止瀏覽器緩存。

    'asp 為例 禁止緩存

    Response.Buffer 
    = True 
    Response.ExpiresAbsolute 
    = Now() - 1 
    Response.Expires 
    = 0 
    Response.CacheControl 
    = "no-cache" 
    Response.AddHeader 
    "Pragma""No-Cache" 

    對(duì)于Ajax 的請(qǐng)求(不管是靜態(tài)數(shù)據(jù)還是動(dòng)態(tài)數(shù)據(jù)):

    //以下三種方法使用其中任何一種方法都可以
    xmlhttp.setRequestHeader("Cache-Control","no-cache");  
    //或者
    xmlhttp.setRequestHeader("If-Modified-Since","0");
    //或者
    xmlhttp.Open(url+'?rnd='+Math.random(),....)

    如果使用 prototype.js  , 用類似這樣的代碼 
    new Ajax.Request(url,{method:"get",requestHeaders:["Cache-Control","no-cache"]})
    或者
    new Ajax.Request(url,{method:"get",requestHeaders:["If-Modified-Since","0"]})
     

    什么情況下,要禁止靜態(tài)文件緩存:
    1、經(jīng)常可能要改動(dòng)的 js, css.
           比如 一個(gè)html 文件, test.html 在 1.0版本中。可能是這樣
         <script src="common.js"></script>
         修改后  v1.1版本:
     <script src="common.js"></script>
     <script src="foo.js"></script>
       新增加了一個(gè)foo.js  同時(shí),也改動(dòng)了common.js , 在common.js 中定義了新的類,并在foo.js 中使用了common.js. 

    在這種情況下如果以前用戶瀏覽過(guò) 1.0版本的 html 文件,那么他的瀏覽器自動(dòng)緩存了 common.js
    當(dāng)他瀏覽新版本的時(shí)候,因?yàn)槭褂玫氖?v1.1的 foo.js 和 v1.0的 common.js ,這樣將導(dǎo)致腳本出錯(cuò)。


    解決方法探討:
      因?yàn)閏ss,js 是通過(guò) <script src=....> 這種方式加載的,所以,很難使用 asp 的那種服務(wù)器端禁止緩存的辦法。也很難使用ajax的通過(guò)設(shè)置 http請(qǐng)求頭的辦法禁止使用緩存。

    看來(lái)隨機(jī)數(shù)是個(gè)好辦法。

    //方法一:
    document.write("<script src='test.js?rnd="+Math.random()+"'></s"+"cript>")

    //方法二:
    var js=document.createElement("script")
    js.src
    ="test.js"+Math.random()
    document.body.appendChild(js)


    但是,如果采用隨機(jī)數(shù)的話, js文件將永遠(yuǎn)得不到緩存,每次都必須重新從服務(wù)器加載,即使沒(méi)有任何更改。
    大家如果經(jīng)常上國(guó)外網(wǎng)站的話,可以看到他們通常采用這樣的方式來(lái)解決:
    <script src="test.js?ver=113"></script>
    其中 ver=113 的 113就是版本號(hào),一般都是采用 CVS 或其他工具生成的開(kāi)發(fā)版本號(hào)。

    這樣真正做到了應(yīng)該緩存的時(shí)候緩存靜態(tài)文件,當(dāng)版本有更新的時(shí)候從獲取最新的版本,并更新緩存。
    對(duì)于圖像 <img src="test.jps?ver=在CVS的版本號(hào)"> 來(lái)有效利用和更新緩存.


    唉,現(xiàn)在在CSDN的Web版,不知道有多少人在重復(fù)問(wèn)著同一個(gè)問(wèn)題。“怎么通過(guò)程序刪除清空客戶端的瀏覽器緩存”.........

     

    未完待續(xù):

    下一篇:  利用瀏覽器緩存來(lái)改善用戶體驗(yàn)。。。。Ajax模式之預(yù)先加載

    敬請(qǐng)關(guān)注,等我寫完再加上鏈接

    posted on 2008-01-03 09:19 feingto 閱讀(2574) 評(píng)論(1)  編輯  收藏 所屬分類: Java Web

    評(píng)論

    # re: 怎么避免瀏覽器緩存靜態(tài)文件  回復(fù)  更多評(píng)論   

    你的文章解決了我的問(wèn)題, 多謝多謝
    2009-10-20 16:46 | jruv
    主站蜘蛛池模板: 国产精品亚洲专区在线播放 | 亚洲爆乳大丰满无码专区| 精品日韩99亚洲的在线发布| 亚洲日韩AV一区二区三区四区| 3d动漫精品啪啪一区二区免费| 亚洲日产韩国一二三四区| 亚洲爆乳成av人在线视菜奈实| 黄瓜视频影院在线观看免费| 亚洲国色天香视频| 曰批视频免费30分钟成人| 亚洲天堂久久精品| 84pao国产成视频免费播放| 亚洲网站在线播放| 91在线视频免费播放| 亚洲中文无码永久免| 免费一级毛片在线播放不收费| 西西人体大胆免费视频| 亚洲人成亚洲人成在线观看| 三级网站在线免费观看| 日韩精品一区二区亚洲AV观看 | 成全视频在线观看免费高清动漫视频下载| 亚洲一区二区三区无码国产| 成人午夜大片免费7777| 免费视频成人国产精品网站| 亚洲精品美女久久久久99| 久久精品一本到99热免费| 亚洲av午夜精品无码专区| 国产精品国产自线拍免费软件| 麻豆va在线精品免费播放| 国产av天堂亚洲国产av天堂 | 国产线视频精品免费观看视频| 久久久久亚洲AV无码网站| 青苹果乐园免费高清在线| 暖暖免费中文在线日本| 亚洲成在人线av| 一二三四免费观看在线电影| 在线亚洲精品视频| 777亚洲精品乱码久久久久久| 精品国产免费观看| 一级毛片免费毛片一级毛片免费 | 西西人体44rt高清亚洲|