SOAP请求花费太长时间来处理大数据

时间:2012-11-27 13:19:06

标签: php arrays soap

我从其他网站获得了一个帮助SOAP客户端的阵列,这是一个非常大的阵列,你可以在这里查看短版 An array

我需要获取类别名称,我的代码在这里,它可以工作但会减慢网站速度。如果有人能提供更好的代码。

$client = new nusoap_client('http://87.253.63.146/b2b/b2bWS?WSDL', 'wsdl');
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
$parametrebi = array('user' => '','brand' => '', 'vat_zone' => 'GEVAT', 'currency' => 'GEL', 'all_items' => 'Y', 'page_num' => '1', 'lines_per_page' => '25');

$result = $client->call('GetPriceList', $parametrebi, array('return' => 'xsd:string'), "");
foreach($result['PriceList']['categories']['category'] as $category)
{
    echo '<option value="'.$category['!id'].'">'.$category['!name'].'</option>';
}

1 个答案:

答案 0 :(得分:0)

类别经常改变吗?
你不能经常轮询这些类别吗?

例如,每5分钟左右进行一次肥皂调用,并将类别保存到数据库中的表(不是一个好主意)或内存缓存。

http://memcached.org/

如果你可以使用memcache ...这是一个例子:

$memcache_obj = new Memcache();
$memcache_obj->connect('memcache_host', 11211);

if(!$categories = $memcache_obj->get('soap_categories')) {
 $client = new nusoap_client('http://87.253.63.146/b2b/b2bWS?WSDL', 'wsdl');
 $client->soap_defencoding = 'UTF-8';
 $client->decode_utf8 = false;
 $parametrebi = array('user' => '','brand' => '', 'vat_zone' => 'GEVAT', 'currency' => 'GEL',    'all_items' => 'Y', 'page_num' => '1', 'lines_per_page' => '25');
 $result = $client->call('GetPriceList', $parametrebi, array('return' => 'xsd:string'), "");
 $categories = $result['PriceList']['categories']['category'];
 $memcache_obj->set('soap_categories', $categories)
}


foreach($categories as $category)
{
    echo '<option value="'.$category['!id'].'">'.$category['!name'].'</option>';
}

您可以将memcache上的过期时间设置为1,2,5 ... ect minuites,以便每次缓存过期时更新类别。除此之外,当缓存过期时,查找时间将小于5-10ms。