2012-11-27 167 views
5

我從其他網站上的陣列,幫助SOAP客戶端,這是相當大的數組,你可以檢查出來短版這裏
An arraySOAP請求花費太長時間來處理大型數據

我需要得到類別名稱,我的代碼在這裏,它的工作原理,但減慢網站。如果有人能提供更好的代碼。

$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>'; 
} 

回答

0

這些類別經常變化嗎?
你不能每隔一段時間輪詢一次類別嗎?

例如每隔5分鐘左右進行一次soap調用,並將類別保存到DB(不是一個好主意)或memcache中的表中。

http://memcached.org/

如果你可以使用內存緩存......這裏是一個圍脖例如:

$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>'; 
} 

您可以在內存緩存設置過期時間,1,2,5 ...... ECT minuites所以每當緩存過期時,類別都會更新。除此之外,當緩存過期時,查找時間將小於5-10ms。

+0

非常感謝你......我決定在會話中存儲數據,這是一個好主意嗎?會話中存儲數據是否有限制? – GioGio

相關問題