Оптимизация работы WordPress | Все что вы хотели знать о хостинге и сайтостроении

Оптимизация работы WordPress


Рубрика: PHP

Совет №1. Ставьте ту версию WordPress где вам хватает функционала, не смотрите на циферки версии.

Задача будет рассматриваться на реальном пример (анонимный пример).

Что имеем в начале — сайт со следующим аппетитом (рассматриваем морда):

  • >55м памяти
  • >80 запросов
  • >>2 секунд генерации
  • 26 активных плагинов

План действий:

  • Замеры и анализ
  • Чистка темы
  • Чистка плагинов
  • Чистка wordpress
  • Кеширование
  • Другая оптимизация

Замеры и анализ:

Соответственно замеры потребления памяти, количество запросов и время генерации делаются следующим несложным скриптом

<?php
 if ( function_exists('memory_get_usage') )
echo round(memory_get_usage()/1024/1024, 2) . ' Mb '; printf(__('/ %s сек / %d запросов'), timer_stop(0, 5), get_num_queries());
?>

Вставляем это в footer.php.

Для слежки за запросами можно использовать WP Tuner.

Теперь соберем статистику по зонам сайта, а именно:

  • header.php
  • sidebar.php
  • index.php (само тело)
  • footer.php

Самый простой способ это просто делать замеры удаляя из index.php лишние вызовы.
Определяемся с зонами работы (у меня это sidebar и index).

В интернете многие рекомендуют заменять функции вызова информации на статические, либо на define. По сути особого прироста это не дает, а если заменять на статические, то добавляет проблемы управления. Поэтому если заменять, то только через define.

В файле wp-config.php добавляем

define('blog_url','адрес блога');

дальше идем в файл header.php темы и там заменяем

<?php bloginfo(‘url’); ?>

Получаем небольшой выхлоп выигрыш(но он мизерный).

Совет N2. Заменить вызов функций с информацией о блоге на define

Аналогично нужно/можно почистить и другие файлы темы.
После своих замеров я получил, что самое тяжелое это sidebar и тело index.
Начинаем лечить…

Первым делом заменяю меню WordPress в сайдебаре с виджетного на статическое. Это дает выигрыш в ~10 запросов. Теперь смотрим плагины. Для примера возьму один из распространенных — самое обсуждаемое. Раньше использовался следующий код:

<?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 10");

foreach ($result as $topten) {

$postid = $topten->ID;

$title = $topten->post_title;

$commentcount = $topten->comment_count;

?>

<li><a href="<?php echo get_permalink($postid); ?>" title="<?php echo $title ?>"><?php echo $title ?></a></li>

<?php } ?>

Все рабоет, но есть одно но — это функция

<?php echo get_permalink($postid); ?>

Она вызывается каждый раз (для каждой записи). Это очень неприятно. Из ничего создаем много лишних запросов. Обойдем это написав свою функцию генерацию url.

NB на блоге используется ЧПУ (дата/id-название)

<?php $result = $wpdb->get_results("SELECT comment_count,ID,post_title,post_name,post_date FROM $wpdb->posts ORDER BY comment_count DESC LIMIT 0 , 10");

foreach ($result as $topten) {

<li><a href="<?php echo create_url($topten->post_date,$topten->ID,$topten->post_name); ?>" title="<?php echo $topten->post_title; ?>"><?php echo $topten->post_title; ?></a></li>

<?php } ?>
function create_url($date,$id,$post_name)

{

$date = explode(" ",$date);

$date = explode("-",$date[0]);

return blog_url."/".$date[2]."/".$date[1]."/".$date[0]."/".$id."-".$post_name."/";

}

Ничего сложно, но теперь экономим ~10 запросов.

Аналогично нужно проверить другие плагины. (по опыту скажу, что очень прожорливы плагины рейтинга на вывод через виджеты).

Совет №3. Проверяйте какие плагины используете.

Теперь начинается самое простое, а именно просто подключаем дополнительные плагины.
Плагин wp-optimize он чистит БД от лишнего мусора. (прироста особого не почуствовал)
Плагин Pure PHP Localization для сокращения и облегчения файлов перевода (получил выигрыш 10 м)
Плагин Disable WordPress *** для отключения проверки обновлений (можно сделать через код)
Плагин WP File Cache для кеширования (выигрыш в количество запросов в 2 раза)
Совет №4. Дополнительная оптимизация через плагины.
Варианты дополнительной оптимизации(короткой строкой)
Расширения zlib и eaccelerator + использовать nginx с Apache для отдачи статики.

Совет N5. Серверная оптимизация.

Вывод:
В итоге получаем следующую картину (после всей работы)

  • Память:45.5м
  • Время: ~1c
  • Запросы: 23
Если вам понравилась статья или была полезна, поделитесь ею с друзьями: