我有一个类似于Expedia和Priceline的网站。用户输入日期,然后调用10个不同的API来返回结果。从所有10个结果中获取结果(有时)最多需要90秒。
我想要的是在用户等待结果时显示的启动/加载屏幕(类似于Priceline)。
我尝试使用jQuery Ajax来调用API并生成结果,但是有些浏览器会遇到问题(当结果不够快时锁定)。
我正在使用LAMP环境而且我曾想过使用cronjob来处理API并将结果保存在数据库中,但我不确定它会有多实用。
3 个答案:
答案 0 :(得分:6)
- 所有ajax调用都需要异步,因此用户界面保持活动状态。这应该是显而易见的,但既然你提到了浏览器锁定,我想我最好提一下。
- 您可能需要了解浏览器是否对浏览器允许的并发ajax调用数量有任何浏览器窗口限制。如果他们这样做并且数量少于你想要的数量,你将不得不重新考虑事情。
- 您肯定希望在等待结果时提供一些“加载结果......”类型的指标。
- 如果您的数据是可以显示渐进结果的数据类型(例如,当每个ajax调用返回时显示一些新信息),则用户会觉得该功能比您等待所有10个完成时更具响应性在展示任何东西之前。
- 对于任何事情,只要您的电话正在进行,用户就应该有一种简单的方法来停止交易并返回您网站中的有用位置(无需杀死浏览器窗口或离开您的网站)。你甚至不想让不耐烦的用户再次尝试而不是离开。
- 如果您在同时连接上遇到浏览器模仿,则可能需要让服务器代理请求。向您的服务器发送少量请求,然后根据需要触发尽可能多的请求,并返回整理的数据。
- 如果请求的数据可以在您的服务器上有效地缓存或预取而不影响准确性,那么这可能真的有助于提高性能。
- 确保您处理ajax调用的所有错误条件,以便用户体验至少允许用户再次尝试,或者最好继续使用较少的结果,如果某些连接不起作用。
- 了解ajax代码中所有连接超时的设置,并确保它们适合您的应用程序。如果默认连接超时时间不足以封装大多数ajax调用,则可能需要延长它。
- 设计一个或多个ajax调用失败的情况。了解您的应用程序将会发生什么,并测试该条件,以确保所需的用户体验真正有效。
- 请注意(当使用异步Ajax调用时),用户可以与您的页面进行交互,因此您可能需要禁用,隐藏或以其他方式阻止与异步调用期间不应该使用的页面部分进行交互。 / LI>
- 前一点的另一面是,您可能希望在等待异步调用完成时允许某些类型的交互。例如,您可能希望允许用户改变主意并开始新请求。你可能希望他们在等待的过程的下一步中与某些东西进行交互,等等......基本上,你可以在等待进度信息,部分结果或其他工作的同时提供它们。 ,他们会注意到或者在等待的时间越少。
醇>
答案 1 :(得分:1)
您是否尝试过beanstalkd之类的内容?似乎延迟时间长达90秒,您应该排队作业并在结果准备就绪时通知用户,而不是同步运行作业并显示长时间运行的启动页面。要实施推送通知,请尝试jQuery Comet。
答案 2 :(得分:0)
如果您需要一次显示所有结果,请单击一个php页面,让它通过curl进行调用。请记住设定的时间限制。
否则,将工作分成两到四页,然后向每个页面发出ajax调用。每个返回时,显示这些结果。在这种情况下,简单的加载图像就足够了。没有飞溅在这里。
请记住缓存尽可能的内容。
***修改
请注意,我专注于php在这里进行api调用。你的服务器与T1 +连接肯定会比我的拨号更快地处理10个电话。 :)