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

相关文章
相关标签/搜索