Silverlight 緩存控制策略

一般咱們用html或asp.net頁面承載Silverlight包,因爲瀏覽器緩存機制的存在,使得你的應用更新時,客戶見到每每是舊版的程序,而徹底禁止緩存,每次打開頁面都要從新下載xap,對於體積較大的程序,這將使用戶體驗大打折扣!html

下面介紹一種可手動控制客戶端是否刷新xap包的方法,既保證升級的時候客戶端能同步更新,又可以使用緩存機制,加速程序加載速度:vim

1.站點的默認頁採用aspx或jsp,而後轉向另外一個真正承載xap的頁面(能夠是aspx,jsp或html), 下面以aspx爲例,首頁index.aspx代碼以下瀏覽器

<%@ Page Language="C#" AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">   
</head>
<body>
    <%Server.Transfer("root.html?"+DateTime.Now.ToString(),true);%>
</body>
</html>

2.root.html代碼片斷緩存

<form id="form1" runat="server" style="height:100%">
    <div id="silverlightControlHost">
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
          <param name="source" value="ClientBin/Sample.xap?4"/>
          <param name="onError" value="onSilverlightError" />
          <param name="background" value="white" />
          <param name="minRuntimeVersion" value="5.0.61118.0" />
          <param name="autoUpgrade" value="true" />
          <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
               <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
          </a>
        </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
    </form>

 

方法的核心是採用動態首頁轉向不被緩存的承載頁面,只有保證承載頁面不被緩存,那麼你手動更改Sample.xap?XXX參數的時候纔會生效;其次是每次升級的時候,對應手動修改Sample.xap?XXX的參數便可保證客戶端瀏覽器會從新下載xap,又因爲此參數是常量,可使得緩存機制生效!app

這裏着重再強調下, 有人也許會問爲何不直接將root.html設爲首頁?由於html頁面自己也是會被緩存的,即便你把xap的參數改了,客戶端緩存的也是舊版的html。固然首頁也能夠不用aspx,直接用html配合js隨機函數也可實現跳轉-----只是地址欄url會跟着變化,看上去很沒有技術含量啊,呵呵。asp.net

 

參考:http://www.cnblogs.com/vimsk/archive/2011/04/09/2010812.htmljsp

相關文章
相關標籤/搜索