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

时间:2012-03-23 20:37:30

标签: asp.net ajax wcf azure

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

以下是两个选项,我们假设我们正在处理1,500条记录,每页的记录长度为20条。 困境在于存储1,500个记录ID的位置。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

也许我是误解,但我真的不明白你的做法。如果您知道页面长度并且知道所需的页码,为什么不能将这些作为参数发送到ajax调用中的服务器,然后在db的sql语句中将其限制为此值。我的意思是说,首先要知道这些ID是什么意思。例如,查看jquery datatables插件如何在此处执行分页:http://www.datatables.net/examples/server_side/server_side.html。如您所见,他们使用将页码和页面位置发布到服务器的方法。然后,很容易限制你想要返回的行(至少在Oracle,MySQL和MS SQL中)。除非我完全忽略了这种情况,请告诉我。