#php
#php
Вопрос:
это мой код. Он получает переменные из URL. Это очень медленно, а иногда даже не завершается. Как я могу это улучшить?
Примечание: В большинстве случаев некоторые переменные не будут иметь никакого значения. Я подумал, что если я проверю это и удалю его массив из запроса, это как-то улучшит его.
$value1 = $_GET['extra1'];
$value2 = $_GET['extra2'];
$value3 = $_GET['extra3'];
$value4 = $_GET['extra4'];
$value5 = $_GET['extra5'];
$value6 = $_GET['extra6'];
$value7 = $_GET['extra7'];
$value8 = $_GET['extra8'];
$value9 = $_GET['extra9'];
$value10 = $_GET['extra10'];
$args = array(
'meta_query' => array(
array(
'key' => extra1,
'value' => $value1,
'compare' => '='
),
array(
'key' => extra2,
'value' => $value2,
'compare' => '='
),
array(
'key' => extra3,
'value' => $value3,
'compare' => '='
),
array(
'key' => extra4,
'value' => $value4,
'compare' => '='
),
array(
'key' => extra5,
'value' => $value5,
'compare' => '='
),
array(
'key' => extra6,
'value' => $value6,
'compare' => '='
),
array(
'key' => extra7,
'value' => $value7,
'compare' => '='
),
array(
'key' => extra8,
'value' => $value8,
'compare' => '='
),
array(
'key' => extra9,
'value' => $value9,
'compare' => '='
),
array(
'key' => extra10,
'value' => $value10,
'compare' => '='
)
)
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) :
while ( $query->have_posts() ) : $query->the_post();
the_title();
endwhile;
endif;
Ответ №1:
Вероятно, вы запрашиваете медленный запрос из базы данных.
Включите журнал медленных запросов и используйте его, чтобы узнать, как выглядит этот запрос, а затем найдите способ его улучшить.
http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
Вот профилировщик, но он, вероятно, просто расскажет вам то, что я только что сказал:
http://www.xdebug.org/docs/profiler
Не связанные, но полезные циклы.
for ($i = 1; array_key_exists('extra'. $i, $_GET); $i ) {
$args['meta_query'][] = array(
'key' => 'extra'. $i,
'value' => $_GET['extra'. $i],
'compare' => '=',
);
}
Комментарии:
1. Спасибо вам за это. Это сделало его быстрее! Создает ли он массив, только если у него есть значение? (как я уже говорил, в большинстве случаев некоторые значения пусты)
Ответ №2:
что делает новый WP_Query ($ args)? Я не думаю, что приведенный выше код был бы медленным (независимо от того, насколько ужасно написан), вы можете поместить несколько инструкций печати, выводящих время в микросекундах.
Поместите один прямо вверху, один непосредственно перед new WP_Query, один сразу после него и один в самом конце. Я подозреваю, что WP_QUERY требует времени.
Комментарии:
1. Это функция WordPress. Есть ли способ иметь что-то вроде
if ($extra1) { array(...) }
просто для получения только необходимых массивов?