Ajax.net - 改善页面加载时间

时间:2011-04-30 18:39:09

标签: c# asp.net ajax load-time

这是我的问题。我正在开发一个网站,允许用户预订世界各地的酒店,就像booking.com,expedia.com等。

当用户搜索某个城市的酒店时,我通过Web服务与不同的提供商联系,然后显示结果。在几乎每个提供商中,这意味着:

1)在WS中调用一个方法,该方法返回城市中选定日期的可用酒店。对于这些酒店中的每一家:

  • 2)从非常大的XML文件(通常超过1个)中读取,以获取地址,电话,传真,描述,服务等静态信息。
  • 3)在WS中调用第二个方法以获取可用的房间信息。
  • 4)显示结果

我遇到的问题与页面加载时间有关,这是这些网站的关键因素。

第一次调用WS(第1点),这是必要的,我无能为力,所以我必须接受这个时间。其他两点也是必要的,但我的目的是通过显示酒店加载来改善用户体验。

假设您正在寻找布宜诺斯艾利斯的酒店。您输入“Buenos Aires”作为目的地,然后点击“Buscar”按钮。您可能会注意到,在完成下一页的加载之前,会显示加载消息。而不是等待所有酒店加载,我想做的,我认为将改善用户的体验是:

  1. 当用户点击“Buscar”按钮时,立即将用户发送到HotelList页面
  2. 显示每家酒店获取的信息,并在顶部显示“加载1家XXX酒店”的消息......“装载2家XXX酒店”......
  3. 我一直在寻找描述如何实现这一目标的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 = "...";
    }
    

2 个答案:

答案 0 :(得分:1)

Re“当它们到达时”,最简单的事情是在后端构建一个(线程安全的)待处理项目队列,即。新结果进入队列 - 并让您的JSON查询每隔几秒轮询队列中的新数据(对于该会话)。

重新表现;只是简介它并攻击配置文件显示正在伤害的位。将XML预加载到某个索引结构(甚至可能是数据库)将是我的主要猜测......

答案 1 :(得分:0)

这是我的想法,目标是缓存CargarHoteles()酒店功能的结果。因为您正在缓存它,所以您可以让后台进程在用户界面快速响应时完成工作。

当客户端首先询问有关一组参数的信息时,服务会返回该组参数的唯一ID(它会查看它是否已经存在于缓存中并返回(如果存在))。当客户端获得唯一ID时,它会开始向服务器询问一些结果 - 如果它们已经在缓存中,它们会立即返回 - 或者一个子集返回,并指示搜索完成了多少。

在服务器端,您有一个工作进程(或进程 - 如果有一个好的方法,这个解决方案允许您在任务中抛出更多的机器/进程,例如每个xml文件的任务。)这些工作人员正在解决问题并将结果放入缓存中,完成后将缓存项标记为已完成。下次客户端请求更多信息时,它会获知所有结果​​。

请注意,此设计与Marc的建议兼容,即他所讨论的队列是作为缓存中的条目构建的结果。

这个解决方案的一个很好的功能是,如果一个地方有很多兴趣(每个人都参加奥运会!)你的网站会变得更快。

我希望这很清楚。发布问题,如果不是,我会尝试解释更多。