2013-07-17 2 views
0

У меня есть следующий код PHP:скорости время PHP нагрузки до

// Add the unsubscribers to an array 
$unsubs = array(); 
foreach($unsubscribers->response->Results as $entry2) { 
    $unsubs[] = $entry2->EmailAddress; 
} 

// Loop through the subscribers 
foreach($result->response->Results as $entry) { 

    echo '<tr class="'. $entry->EmailAddress.'">';  
    echo '<td>'. $entry->EmailAddress.'</td>'; 
    echo '<td></td><td>'; 

    // If the subscriber is in our unsubscriber array, output the email again 
    if(in_array($entry->EmailAddress, $unsubs)) { 
     echo $entry->EmailAddress; 
    } 

    echo '</td><td></td>'; 
    echo '<td></td>'; 
    echo '<td></td>'; 
    echo '</tr>'; 

} 

Где пустой <td></td> расположен я хотел бы поместить следующее:

$getlists = new CS_REST_Campaigns($_POST['campaign_id'], $auth); 
$getlistsresult = $wrap->get_lists_and_segments(); 
    foreach($getlistsresult->response->Lists as $list) { 
     //echo $list->ListID; 
    } 

$wrapcount = new CS_REST_Subscribers($list->ListID, $auth); 
$resultcount = $wrapcount->get_history($entry->EmailAddress); 


    foreach($resultcount->response as $entrycount) { 

     $counts = array(); 

foreach($entrycount->Actions as $actions) { 
    if(!isset($counts[$actions->Event])) { 
     $counts[$actions->Event] = 0; 
    } 
    ++$counts[$actions->Event]; 
} 


    echo '<td>'; 
    if ($counts['Click']){echo $counts['Click'];} 
    echo '</td>'; 

    echo '<td>'; 
    if ($counts['Bounce']){echo 'Yes';} 
    echo '</td>'; 

    echo '<td>'; 
    if ($counts['Open']){echo $counts['Open'];} 
    echo '</td>'; 

    } 

Это работает до некоторой степени, но время загрузки страницы резко увеличивается. Я считаю, что, честно говоря, моему коду нужно будет убирать. Любые предложения о том, как ускорить это?

+0

Узкое место находится внутри 'CS_REST_Campaigns :: get_lists_and_segments()' и/или 'CS_REST_Subscribers :: get_history()' - не зная, что они делают и как они это делают, нет способа помочь вам ускорить его. Вы должны посмотреть на профилировщик, например http://www.xdebug.org/docs/profiler – DaveRandom

+0

спасибо за ссылку. Эти файлы находятся прямо из php-обертки, предоставляемой монитором кампании. Я так и не изменил их, поэтому они не должны вызывать никаких проблем. – danyo

+0

Похоже, что они обращаются к внешнему API, я был бы очень удивлен, если это не причина вашего замедления. Вы ожидаете, что по крайней мере 2 других HTTP-запроса будут полностью обработаны, прежде чем вы сможете продолжить обработку той, которую вы сейчас обрабатываете. Циклы должны потреблять не более нескольких миллисекунд, и это будет, если они имеют дело с * лотом * данных, это, скорее всего, намного меньше. – DaveRandom

ответ

1

Не так много, что я вижу, что в вашем коде явно неоптимизирован, есть функции, которые я не знаю, из ваших классов CS_REST, но мы не знаем, что делают эти функции или если они могут быть медленным или оптимизированным.

С этой информацией, я вижу, что может помочь вам использовать класс SplFixedArray. Это будет особенно полезно, если у вас много записей в ваших массивах и выполняйте над ними много операций. В принципе, они похожи на реальные массивы, так как их индекс всегда является целым числом, и они имеют фиксированный размер, что, в свою очередь, делает их более быстрыми в использовании.

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