网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

使用ASP.NET AJAX启用客户端缓存

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
  private static void InitializeCachePolicy(WebServiceMethodData methodData, HttpContext context)
  {
   int cacheDuration = methodData.CacheDuration;
   if (cacheDuration > 0)
   {
   context.Response.Cache.SetCacheability(HttpCacheability.Server);
   context.Response.Cache.SetExpires(DateTime.Now.AddSeconds((double) cacheDuration));
   context.Response.Cache.SetSlidingExpiration(false);
   context.Response.Cache.SetValidUntilExpires(true);
   if (methodData.ParameterDatas.Count > 0)
   {
   context.Response.Cache.VaryByParams["*"] = true;
   }
   else
   {
   context.Response.Cache.VaryByParams.IgnoreParams = true;
   }
   }
   else
   {
   context.Response.Cache.SetNoServerCaching();
   context.Response.Cache.SetMaxAge(TimeSpan.Zero);
   }
  } 


    当ASP.NET AJAX发现即将执行的方法被设置了CacheDuration时,它会将HttpCacheability.Server作为参数调用当前上下文中HttpCachePolicy的SetCacheability方法,这样请求的结果将会被缓存以便将来使用。如果将要执行的方法含有参数,那么通过VaryByParams属性从HttpCachePolicy中得到的HttpCacheVaryByParams对象里“*”这一项将被设为true,由此可知,ASP.NET会为不同的参数组合缓存不同的结果。
  
    我们来看一下缓存的效果:
  


  与通过自己编程来缓存数据相比,设置CacheDuration属性来缓存结果的最大优势就在于使用方式是在简单。现在我们就可以将注意力完全放在方法的自身实现上而不用处理缓存中会出现的问题(例如:同步问题)。这个方法也提高了少许性能,因为现在已经无需将结果序列化成JSON对象了,ASP.NET将全权负责将缓存的数据发送到各客户端。但是在某些时候由我们来缓存数据会更合适一些,因为这样可以省下服务器端的资源。例如,以下是一个接受四个参数的方法,其中第二个参数表示是否应该将剩下的两个参数忽略:

  public string GetResult(int key, bool ignoreRest, string args1, string args2) { }  

 
    在这种情况下,几乎所有的程序员都会在ignoreRest参数为true的情况下仅仅根据key参数的不同值来缓存数据。但是ASP.NET无法得知参数的含义,因此它会为所有的参数组合形式各缓存一份数据,而不去关心它们是否相同。
  
  客户端缓存
    我使用HttpWatch Basic Edition来捕获客户端和服务器端之间的通信。这是捕获结果的截图:
  


  每当我们访问Script Method时,相同的内容会被POST到服务器端,并且得到相同的结果。尽管结果被缓存了,我们只是节省了方法的执行时间,但是round-trip的数量依旧没有减少。这意味着如果结果的数据量很大,或者带宽很窄,对用户来说访问Script Method依旧是个耗时的过程。因此如果我们能够在客户端缓存结果的话,用户使用相同参数访问方法时就可以立即得到数据,即使在网络中端的情况下。

    说干就干。
  
    首先,我们只能使用HTTP GET方法来访问方法,因为我们需要让浏览器为我们缓存结果。

  [WebMethod]
  [ScriptMethod(UseHttpGet = true)]
  public DateTime GetServerTime() { } 
 

&

  • 上一篇资讯: 如何实现站点的RSS输出
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号