如何处理外部API延迟

时间:2012-08-21 01:42:59

标签: php web-services curl memcached latency

我有一个应用程序正在使用Curl获取几个电子商务网站,寻找最优惠的价格。 此过程返回一个表格,比较所有搜索过的网站的价格。

但现在我们遇到了问题,商店数量开始增加,加载时间实际上在用户体验方面是不可接受的。 (实际是10s页面加载)

因此,我们决定创建一个数据库,并开始在此数据库中注入所有Curl过滤结果,以减少DNS调用,并增加Pageload。

我想知道,尽管我们付出了很多努力,但实施Memcache模块仍然是一个优势吗? 我的意思是,它会帮助更多还是浪费时间?

Memcache的想法受到这个话题的启发,一个有类似问题的人:Memcache to deal with high latency web services APIs - good idea?

2 个答案:

答案 0 :(得分:1)

Memcache可能会有所帮助,但(在我看来)这是解决问题的一种奇怪方式。如果是我,我会这样做:

首先,我确实会在数据库中缓存所有内容。当用户搜索或任何交互触发此事件时,我会向他们显示一个“搜索”页面,其中包含服务器当前具有的任何结果,以及在异步搜索完成时填充的进度条。

我会使用AJAX在可用时添加其他结果。我想象搜索需要大约十秒钟 - 可能需要更长时间,这很好。只要你有一个进度条,你的用户就会欣赏并理解Stuff Is Going On。

显然,您的系统搜索次数越多,您在数据库中的数据就越多。我会使用半小时以下的缓存结果,并且还会记录搜索条件,并确保始终保持前100个(或左右)搜索缓存。

了解您的客户并获得他们想要的产品。这与任何特定技术没有多大关系,但它完全取决于您预测他们想要的东西(或编写为您预测的软件!)

哦,并且没有理由说PHP无法处理这项工作。将一堆不相关的接口捆绑在一起是PHP最擅长的事情之一。

答案 1 :(得分:0)

您的结果超出了 PHP的范围。当cronjob可以很容易地用于填充数据库并且您的PHP脚本可以简单地查询您的数据库时,不要在PHP中混淆结果。

如果您打算只坚持使用PHP,那么我建议您更改脚本,以便根据填充的数据为您的数据库编制索引。要填充结果,请使用cronjob ping一个用户无法访问的PHP脚本,这将执行所有卷曲功能。