Низкая скорость и высокая загрузка процессора для моего кода. Как это улучшить?

#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(...) } просто для получения только необходимых массивов?