У меня есть следующий код 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>';
}
Это работает до некоторой степени, но время загрузки страницы резко увеличивается. Я считаю, что, честно говоря, моему коду нужно будет убирать. Любые предложения о том, как ускорить это?
Узкое место находится внутри 'CS_REST_Campaigns :: get_lists_and_segments()' и/или 'CS_REST_Subscribers :: get_history()' - не зная, что они делают и как они это делают, нет способа помочь вам ускорить его. Вы должны посмотреть на профилировщик, например http://www.xdebug.org/docs/profiler – DaveRandom
спасибо за ссылку. Эти файлы находятся прямо из php-обертки, предоставляемой монитором кампании. Я так и не изменил их, поэтому они не должны вызывать никаких проблем. – danyo
Похоже, что они обращаются к внешнему API, я был бы очень удивлен, если это не причина вашего замедления. Вы ожидаете, что по крайней мере 2 других HTTP-запроса будут полностью обработаны, прежде чем вы сможете продолжить обработку той, которую вы сейчас обрабатываете. Циклы должны потреблять не более нескольких миллисекунд, и это будет, если они имеют дело с * лотом * данных, это, скорее всего, намного меньше. – DaveRandom