这是我的问题。我正在开发一个网站,允许用户预订世界各地的酒店,就像booking.com,expedia.com等。
当用户搜索某个城市的酒店时,我通过Web服务与不同的提供商联系,然后显示结果。在几乎每个提供商中,这意味着:
1)在WS中调用一个方法,该方法返回城市中选定日期的可用酒店。对于这些酒店中的每一家:
我遇到的问题与页面加载时间有关,这是这些网站的关键因素。
第一次调用WS(第1点),这是必要的,我无能为力,所以我必须接受这个时间。其他两点也是必要的,但我的目的是通过显示酒店加载来改善用户体验。
假设您正在寻找布宜诺斯艾利斯的酒店。您输入“Buenos Aires”作为目的地,然后点击“Buscar”按钮。您可能会注意到,在完成下一页的加载之前,会显示加载消息。而不是等待所有酒店加载,我想做的,我认为将改善用户的体验是:
我一直在寻找描述如何实现这一目标的ajax示例,但没有找到任何明确的文章。我真的很感兴趣,有人可以指出我正确的方向。
谢谢!
尝试使用多线程但不显示结果。 我正在使用Literal Control显示结果。这是代码的一部分:
HotelList.aspx
<asp:Literal ID="HotelesResultadoBusqueda" runat="server"></asp:Literal>
HotelList.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
...
...
ThreadStart job = new ThreadStart(CargarHoteles);
Thread thread = new Thread(job);
thread.Start();
}
private void CargarHoteles()
{
// Load Hotels
ArrayList hotels = WebService......
foreach(Hotel hotel in hotels)
{.....}
....
this.HotelesResultadoBusqueda.Text = "...";
}
答案 0 :(得分:1)
Re“当它们到达时”,最简单的事情是在后端构建一个(线程安全的)待处理项目队列,即。新结果进入队列 - 并让您的JSON查询每隔几秒轮询队列中的新数据(对于该会话)。
重新表现;只是简介它并攻击配置文件显示正在伤害的位。将XML预加载到某个索引结构(甚至可能是数据库)将是我的主要猜测......
答案 1 :(得分:0)
这是我的想法,目标是缓存CargarHoteles()酒店功能的结果。因为您正在缓存它,所以您可以让后台进程在用户界面快速响应时完成工作。
当客户端首先询问有关一组参数的信息时,服务会返回该组参数的唯一ID(它会查看它是否已经存在于缓存中并返回(如果存在))。当客户端获得唯一ID时,它会开始向服务器询问一些结果 - 如果它们已经在缓存中,它们会立即返回 - 或者一个子集返回,并指示搜索完成了多少。
在服务器端,您有一个工作进程(或进程 - 如果有一个好的方法,这个解决方案允许您在任务中抛出更多的机器/进程,例如每个xml文件的任务。)这些工作人员正在解决问题并将结果放入缓存中,完成后将缓存项标记为已完成。下次客户端请求更多信息时,它会获知所有结果。
请注意,此设计与Marc的建议兼容,即他所讨论的队列是作为缓存中的条目构建的结果。
这个解决方案的一个很好的功能是,如果一个地方有很多兴趣(每个人都参加奥运会!)你的网站会变得更快。
我希望这很清楚。发布问题,如果不是,我会尝试解释更多。