非常正常的情景:
我想对服务器使用单个请求,因为数据库查询很昂贵(而且我不想在Web服务器上缓存任何内容)...所以我在考虑使用Comet或仅刷新第一页数据,然后为其余数据刷新更多脚本标记。
这可行吗?有没有这方面的教程/示例?
感谢。
答案 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可见。
我强烈建议您查看以下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)
将您的第一页分为两部分,
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数组中的其余数据。只涉及一次数据库调用。