帮助搜索具有多个酒店和航班等产品的旅游网站套餐产品的高性能方法UI

Approach to high performance UI of help search travel website package product with multiple hotels and flights and other products

我有一个旅游网站,内置 ASP.NET MVC 5 和 EF5 打包产品。每个套餐产品都有为套餐的每一天定义的多组酒店和航班。

目前,当用户通过我的应用程序搜索特定套餐价格时,我会调用多个酒店和航班供应商的网络服务来获取价格,并在从供应商处获取所有价格后计算总套餐价格。

问题:在获取包裹费率期间,我的网站性能太慢,因为我等待从供应商网络服务获取每个航班和每个酒店的包裹中添加的所有产品的价格,然后更新 UI详情。

我想可能是使用 SignalR 获取酒店/航班费率并使用 angular 更新 UI 以首先显示最快的返回响应。一次,我得到所有价格然后将计算总包价。

在这种情况下,需要帮助才能获得高性能(少于 25 秒)。

谢谢,

维维克

研究大多数此类服务使用的这种方法,这些服务依赖于外部服务来回复,然后按价格、可用性或评级显示最佳:

  1. 获取用户搜索参数,在您的服务器或客户端,您可能需要对其进行格式化,以便为外部提供商做好准备。
  2. SignalR 集线器可用于将上述参数发送到服务器,现在集线器将等待服务器回复并让我们说 运行 一个简单的回调 (addToResults) 函数。
  3. 在服务器上,您将使用现有的方法获取结果,并且可能会并行调用 运行 不同的服务。一旦调用 return 结果,您可以简单地调用集线器上的函数并将结果传递给它。您可能需要将结果格式化为标准格式。
  4. 在客户端,集线器会知道需要触发 addToResults 函数,并将获得的结果添加到 UI。您可以使用 angular 或 jQuery 或任何东西来填充 UI 最新结果或对它们进行排序等。
  5. 在此期间,如果您愿意,您还可以在集线器上使用不同的功能来更新 UI 例如,您正在使用的服务总数、已完成的服务数量以及应等待的用户数量。

理想情况下,等待时间应该减少到需要花费大部分时间和您从服务器发送和获取的额外元数据的服务,但与您现在所做的相比,这将是一个很大的改进。

没有 signalR,你可以做一些你已经知道需要查询 x 数量的服务的事情,你可以简单地对服务器上的不同函数进行 ajax 调用,这将在 return 中给你每个服务的结果。当您从任何服务获得结果时,只需将其附加到结果并继续。这也将减少时间并在第一个 ajax 调用 returned 后立即开始显示结果,并且还可以跟踪剩余的数量等

大部分时间速度将仅限于外部服务响应,因此您越早向用户指示来自更快服务的响应,它看起来会很快,但是如果用户正在寻找提供最低价格的最高评价公司,它是 return最后的等待时间只是最长呼叫的等待时间,而不是所有呼叫的累积等待时间。