客户端上的Asp.net缓存下拉数据

时间:2010-02-06 03:42:55

标签: asp.net caching client-side

我们希望在客户端计算机上缓存某些下拉列表的数据,以减少缓慢变化信息的传输。此数据将用于业务应用程序中的多个页面,例如,经常使用5,000个客户的客户列表进行搜索,创建销售订单或其他目的。 我们已尝试将全部数据加载到页面以及分页数据库访问,并按需加载网格,只返回25-50条记录。用户抱怨这两个选项的性能并希望它更快,因此我们正在寻找有关如何在客户端缓存数据以供重用的选项。

我们已经看到一些关于缓存的符号,可能是服务器生成的JS文件,并且本地缓存为ddl的数据源,但从未找到如何执行此操作。

有什么建议吗?或者您推荐的其他选项?

注意:我们还需要解决此问题的到期,因为有些列表每天会更改几次并且应该刷新(不是在计时器上,而是在根据响应代码更改时)。

2 个答案:

答案 0 :(得分:3)

在您尝试在客户端上开始缓存之前,这是一种无法预测的处理方式,原因很简单,您无法控制其浏览器如何设置为缓存(如果他们将缓存设置为“从不”?),你应该看很多东西。

  1. 您是否先看过服务器上的缓存?您可以使用OutputCache并通过参数(例如网格页码)对其进行更改,以便对所有已查看的数据集进行部分缓存。

  2. 用户体验究竟有什么缓慢?使用firebug或fiddler分析它,看看每页向服务器发出了多少请求。简单地减少发送的HTTP请求的数量(例如,通过合并和缩小CSS和javascripts)将会对响应时间产生奇迹。

  3. ViewState中有什么内容?减少在ViewState中来回发送的数据量,以加快页面加载速度。

  4. 服务器上的数据提取程序耗时太长了吗?优化它,并且可能将数据缓存在服务器上,这样您就不必经常去数据库。

  5. 也许你已经尝试了所有这些,但我认为我会把它扔出去,因为依赖客户端缓存可能是令人沮丧的练习。

答案 1 :(得分:2)

您可以通过javascript执行此操作,将列表转换为JSON并通过服务器缓存中的脚本标记提供。我说JSON是因为像jQuery或任何其他javascript框架之类的东西可以很容易地使用它。

e.g。在html / aspx中:

<script src="CustomerList.aspx?Refresh=12308798798023745" type="text/javascript"></script>

刷新是上次在服务器上更改的的DateTime.Now.Ticks 。因此,当您将此标记放在每个页面中时,客户端只会获取一次,并且当它在服务器上实际更改时再次获取。

像这样的服务器端:

public class Cache {
  public static List<Customer> Customers { get; set; }
  public static DateTime LastRefresh { get; set; }
  public static void RefreshCustomers {
    //Populate Customers, Customers = blah;
    LastRefresh = DateTime.Now;
  }
}

在页面中:

ScriptTagwithRunAtServer.Src = "CustomerList.aspx?Refresh=" + Cache.LastRefresh.Ticks;

你呈现该标签的任何方式都可以,只是一个例子。 CustomerList.aspx页面只会将Cache.Customers呈现为json格式......并且您的页面会运行一些小的javascript来使用它。

只是一个想法,请评论,如果它感兴趣你,我会留下一些东西。