Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net ajax应用程序的分页设计模式_Asp.net_Ajax_Wcf_Azure - Fatal编程技术网

Asp.net ajax应用程序的分页设计模式

Asp.net ajax应用程序的分页设计模式,asp.net,ajax,wcf,azure,Asp.net,Ajax,Wcf,Azure,我正在构建一个ajax应用程序,我可以选择如何构造数据分页功能。基本上,用户将处理1000-2000条记录,但只有20条记录同时从数据库加载,发送到客户端,然后缓存在本地会话存储中。这些记录是包含对象属性(基本上是客户记录)的json字符串 这里有两种选择,假设我们处理1500条记录,每个页面有20条记录难题在于如何存储1500个记录ID。 选项1: 1500条记录的ID被存储为服务器会话上的int列表,并对每个请求进行序列化和反序列化。客户端不知道每个页面的记录ID,只请求一个页码。在服务器上

我正在构建一个ajax应用程序,我可以选择如何构造数据分页功能。基本上,用户将处理1000-2000条记录,但只有20条记录同时从数据库加载,发送到客户端,然后缓存在本地会话存储中。这些记录是包含对象属性(基本上是客户记录)的json字符串

这里有两种选择,假设我们处理1500条记录,每个页面有20条记录难题在于如何存储1500个记录ID。

选项1: 1500条记录的ID被存储为服务器会话上的int列表,并对每个请求进行序列化和反序列化。客户端不知道每个页面的记录ID,只请求一个页码。在服务器上,当用户请求pagex时,我们查看int列表并确定pagex记录的id,加载这些记录并向客户端发送带有这些id的json字符串。这里的缺点是,我们在服务器会话中携带了1500个整数的列表。好处是,当我们请求一个页面时,我们只向服务器发送一个int

选项2: 当用户登录时,1500条记录的ID被发送到客户端,然后该列表存储在本地存储会话中。当用户请求第X页时,javascript函数确定第X页上有哪些记录ID,并向服务器发送一个包含20个整数的json序列化列表。然后服务器返回带有这些ID的记录。好处是服务器端会话更轻,应该可以提高性能(无需在每次请求时读取/写入/序列化该列表),并且可能更具可扩展性。缺点是,每次请求页面时,我们都会向服务器发送一个包含20个整数的列表

我倾向于选择2:这是最好的方法吗


注意1)我要求用户支持HTML5本地存储,2)服务器端实现将是azure和WCF。

也许我误解了,但我并不真正理解您的方法。如果您知道所需的页面长度和页码,为什么不能在ajax调用中将其作为参数发送到服务器,然后在db的sql语句中将其限制为该参数。我想说的是,首先知道这些ID的意义是什么。例如,在这里查看jquery datatables插件如何执行分页:http://www.datatables.net/examples/server_side/server_side.html . 如您所见,他们使用将页码和页面位置发布到服务器的方法。然后,很容易限制基于此返回的行(至少在Oracle、MySQL和MS SQL中是这样)。除非我完全没有抓住要点,否则请告诉我。

为什么客户端(或服务器)需要存储这些ID?你不能只存储当前页码,然后获取下一页吗?看起来你做的工作比你需要的要多,但也许我遗漏了什么。你用SQL来处理数据吗?还是把它们存放在别的地方?如果使用SQL,是否需要缓存数据?如果没有,那么您可以使用SQL的直接分页命令,避免只保留页码和页面大小。是否将1500个ID存储在数据库中?!?客户端请求一个页码?如果数据对所有用户都是通用的,那么使用Application.Cache似乎是合理的。如果数据可能超过5MB,您可能会遇到可用本地存储的麻烦()。如果SQL Server是新的2012版本,那么每次访问数据库()可能是合理的。您是否测量了额外查询对服务器会话的影响?这是我倾向的,但我想在决定之前查看数据。因为如果我知道ID,那么我可以说“给我ID为x,y,z的记录…”。如果我不知道ID,甚至在我可以请求记录之前,我需要在我可以请求记录之前说“去获取所有ID的列表并找出哪些记录在第X页”。知道ID会保存一个查询,这就是我缓存它们的原因;现在我需要找出存储它们的最佳位置:服务器端会话还是本地存储。每个人似乎都有这样的感觉……每页仍有20条记录……简单的解决方案,简单的解决方案。