2015-09-24 4 views
0

Это структура кода PHP, что я используюКак повысить производительность этого PHP-кода?

$Objects = $account->api1(); // This returns an object array with each object being O(data1, data2, data3) 
$retValue = array(); 
foreach($Objects as $O) 
{ 
    if($O->data2 == 'something') 
    { 
     $data4 = $account->api2($O->data2); // returns a value $data4 
     // Initialize $tmp; 
     $tmp->data1 = $O->data1; 
     $tmp->data3 = $O->data3; 
     $tmp->data4 = $data4; 
     $retValue[] = $tmp; 
    } 
} 

В основном то, что мне нужно, это объект массив из следующих значений для которых data2 = «что-то»

O(data1,data3,data4)  

Есть ли способ в котором я могу упростить этот процесс. Каждый вызов api стоит денег, а также включает запрос по запросу, который делает этот процесс как дорогостоящим, так и медленным. Может быть, это будет улучшено? Даже небольшое улучшение производительности/отсутствия вызовов было бы действительно полезно.

+1

Можете ли вы реализовать кеш запросов? Похоже на плохой дизайн API, если вам нужно совершать циклические API-вызовы по набору данных. – Scuzzy

+0

Не думайте, что он мог, поскольку это стоило «денег» по каждому запросу, подразумевает, что api является внешним сервисом. – cylua2

+0

Вы выполняете задание в своем состоянии, я не думаю, что это то, что вы хотите сделать. 'if ($ O-> data2 = 'something')' должно быть 'if ($ O-> data2 == 'something')' – Stnaire

ответ

0

Важно: я предполагаю, что у вас есть некоторые опечатки в вашем вопросе и следующие эквивалентностей

  • $data2 означает $O->data2 Фиксированный в вопросе
  • $O->data4 означает $data4 Фиксированный в вопросе

Вызов $account->api2($O->data2) всегда должен возвращать то же значение , потому что вы всегда проверить, что $O->data2 равно «что-то» .. Таким образом, вы можете назвать это только один раз, insteand каждого времени у вас есть хит.

<?php 

    $Objects = $account->api1(); // This returns an object array with each object being O(data1, data2, data3) 
    $retValue = array(); 

    foreach($Objects as $O) 
    { 
     if($O->data2 == 'something') 
     { 

      // Here, you just call api2 the first time (or never, maybe, if you never needed to) 
      $data4 = isset($data4) ? $data4 : $account->api2($O->data2); 

      // Initialize $tmp; 
      $tmp->data1 = $O->data1; 
      $tmp->data3 = $O->data3; 
      $tmp->data4 = $data4; 
      $retValue[] = $tmp; 
     } 
    } 

?> 
Смежные вопросы