通过HTTP快速加载第一页数据

时间:2010-08-17 20:37:50

标签: .net ajax paging

非常正常的情景:

  • 我有一个包含大量行(> 2000)的报表要呈现为HTML表格。
  • 我在客户端(浏览器)端分页结果。
  • 我想尽快呈现第一页,其余的将继续下载为JSON(总共约1MB)

我想对服务器使用单个请求,因为数据库查询很昂贵(而且我不想在Web服务器上缓存任何内容)...所以我在考虑使用Comet或仅刷新第一页数据,然后为其余数据刷新更多脚本标记。

这可行吗?有没有这方面的教程/示例?

感谢。

8 个答案:

答案 0 :(得分:2)

非常可行;不过我打两个电话就可以了。

在较低级别的协议上,它很容易冲洗,但我记得有关冲洗json的一些有趣的事情。

答案 1 :(得分:2)

将服务器端接口更改为接受来自和接受参数,以便您可以控制获取的数量。在SQL中创建/更改spoc以在SQL端执行高效分页(分页部分看起来像Row_number()OVER(按MyColumn排序))。这实际上会使端到端的第一个查询更快(SQL将发送少于5%的数据 - 比如说100行)。然后在第二个查询中你可以得到所有其余的,或者你可以将它分成2个或更多部分(SQL服务器更快乐地发送非巨型块 - 高效的分页是相对较新的功能 - 比如5岁)。

答案 2 :(得分:1)

从我理解的渲染角度来看,HTML表是一个阻塞过程。浏览器在最后一次

之前不会开始渲染
</table> 

标签。

你可以做的是使用AJAX,首先将数据异步拉入隐藏的div,然后在数据完成后,只需添加表格结束标记并使div可见。

编辑1:

我强烈建议您查看以下link,您应该能够根据自己的需要调整该示例。

在该示例中,我将修改以下行:

  xmlHttp.open("GET","GetWeather.aspx?City=" + city,true);    

到您自己的网址和查询字符串。然后修改以下行:

if(xmlHttp.readyState==4)
   {       
       //show contents of the response using responseText property of xmlHttp obj
       document.getElementById('dvWeather').innerHTML = xmlHttp.responseText;
    } 

这样你附加到现有的HIDDEN div,然后使该div可见(例如使用Jquery)

答案 3 :(得分:1)

将您的第一页分为两部分,

  1. UI
  2. 网络服务
  3. UI将立即加载,一旦加载,UI就可以触发web serivce调用,可以下载范围内的数据。 ASP.NET AJAX Library可用于从同一服务器加载Web服务。

答案 4 :(得分:1)

描述的冲洗/彗星方法应该有效。

您也可以通过进行一次数据库调用,但进行2次HTTP调用。在初始页面加载时,获取ResultSet并将其保存到Application.Cache或Session。将结果的第一个“页面”输出到浏览器。当浏览器完成获取第一页时,对WebService进行AJAX调用(或使用带有一个tick的UpdatePanel / Timer),这将从Application.Cache / Session中获取剩余记录,减去您已检索到的行。最后,清除Application.Cache / Session。

答案 5 :(得分:1)

google提供的新图片搜索似乎几乎就是这样!它将下载1000个图像的链接,以页面底部的脚本编码,并进行页面/滚动客户端。在Firefox中工作,我的IE获取旧版本的页面。在http://www.google.com/images

进行测试

答案 6 :(得分:0)

使用Comet实际上会使用两个连接(一个用于获取第一个页面,另一个用于下载其余的连接),但您可以做的是,如您所说,在第一页之后刷新输出,然后继续每次刷新一次在一段时间内,直到整个文档被下载。您也可以使用GZIP编码,这将使下载速度更快,但它会增加服务器和客户端开销,我不确定您是否可以使用输出刷新。

答案 7 :(得分:0)

您可以使用Web套接字...请求结果集的前100个左右,渲染表,然后发送第二条消息以收集要存储在JSON数组中的其余数据。只涉及一次数据库调用。

相关问题