繁体   English   中英

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

[英]Asp.net Cache Dropdown Data on Client

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

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

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

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

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

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

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

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

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

也许你已经尝试了所有这些,但我想我会把它扔出去,因为依赖客户端缓存可能是一个令人沮丧的运动。

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

例如在html / aspx中:

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

Refresh是上次在服务器上更改的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来使用它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM