在foreach循环中处理api调用

在foreach循环中处理api调用

问题描述:

我有一个api需要在1个foreach循环中多次调用,而且我一直在做的方式是定义api url并解析循环内部的信息,因此它被调用over直到循环结束,但我想知道是否有另一种方式来处理这样的事情。例如,如果我有一个从大约50个状态获取信息的API,并且我将它放在一个foreach循环中,它将循环所有50次,这会使结果加载非常缓慢,我是否正确执行此操作?如果不是,我该如何处理这样的事情呢?在foreach循环中处理api调用

下面是我如何使用它的一个例子。

//Theses are the states 
    $z_state_abrev = zillow_state_abrev(); 

//this is the foreach loop. 
    foreach($z_state_abrev as $states){ 
    $zillow_id = 'X1-ZWz1bp6dndxfd7_75222'; 
    $xml = file_get_contents('http://www.zillow.com/webservice/GetRateSummary.htm?zws-id='.$zillow_id.'&state='.$states.''); 
    $zinfo_rates = simplexml_load_string($xml); 
    foreach($zinfo_rates->response as $rates){ 
     dpr($rates->today->rate[0]); 
     $zinfo_rates .= $rates->today->rate[0]; 
    } 

    } 

这是一个情况下memcache的是我能想到的

http://php.net/manual/en/book.memcache.php

您的file_get_contents的结果存储到内存缓存和后续调用从缓存中拉了最好的选择。它的第一次运行速度会很慢,但每次被调用后会更快。

它增加了您的复杂性,但请记住经常使用网页开发,缓存和缓存的第二条规则。

+0

当你说第一次运行时,它会很慢,但每次运行速度很快之后,你的意思是它对第一次运行它然后第二次快速运行的所有用户来说会很慢,否则将会很慢只是通过网站的第一次初始负载,然后它会加快后,为大家? – Suzed 2013-02-27 20:04:35

+0

取决于。如果将收集的数据作为一个整体应用到应用程序,即所有用户都看到相同的数据,那么当天系统中的第一个人将被缓慢记录到缓存中。但是,如果数据的范围是每个用户,意味着每个用户获得不同的数据,那么当数据被缓存时它们首次进入系统时会变慢。但是这可以在大多数情况下进行管理 – scphantm 2013-02-28 00:19:43

如果API没有为您提供在一个请求中获取多个数据的方法,那么您的运气不好。

但是,为了加速呼叫,请查看curl_multi(或实现它的请求库),以便并行而非串行地拨打您的呼叫。