Мой сайт о WordPress и PHP
 
4 ноября 2006

Выпуск 19. Оптимизация WordPress

Читали 4082 раза
Рубрика: E-mail рассылка
Навигация: Главная » WordPress » E-mail рассылка

Оптимизация WordPress

В своей статье "Производительность WordPress" я рассказал о том, как работает WordPress с базой данных MySQL. Вы можете почитать эту статью, чтобы иметь об этом общее представление. Сегодня же я продолжу эту тему, но уже в практическом разрезе: мы поговорим о том, как оптимизировать WordPress, чтобы обеспечить максимальную производительность блога.

Основные направления оптимизации

В общем-то есть три базовых момента, которые будут влиять на нагрузку, создаваемую блогом на WordPress.

Первый - локализация. Дело в том, что локализация (то есть перевод на русский) на сегодняшний день существует в двух варианта. Первая, которая выполнена по "стандартной" технологии, используется на сайте MyWordpress.ru. В этой локализации перевод хранится в отдельном файле. Проблема здесь в том, что сам файл перевода имеет размер больше 150Кб и загружается каждый раз при вызове страниц сайта. Если учесть, что в основном перевод требуется только для админ-панели, то понятно, что это бессмысленная нагрузка на сервер.

В другой локализации, которую предлагаю я, перевод выполнен прямо в исходных файлах. То есть никакие дополнительные файлы не нужны и за счет этого снижается нагрузка на сервер. Понятно, что если ваш блог имеет небольшую посещаемость (до 100 хостов в день), то для вас не принципиально какую локализацию использовать.

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

Третий момент - используемые плагины. Дело в том, что многие плагинописатели не особенно заботятся об оптимизации своих продуктов, поэтому встречаются такие, где наряду с бессмысленными и неоптимизированными запросами в базе данных, встречаются и сложные циклы, и замысловатые рекурсии, которые способны просто-таки "завалить" сервер.

Отдельным пунктом будет идти речь об особенностях WordPress, влияющих на его производительность.

Шаблоны

Поскольку с локализацией всё ясно, то сразу же приступим к шаблонам.

Большинство шаблонов использует стандартные WordPress-функции. Например для указания кодировки блога используется:

<?php bloginfo('charset'); ?>

Ничего здеь необычного нет, но если подумать, то какой смысл в этом действии? Не каждый день меняется кодировка блога, поэтому можно явно указать кодировку и без помощи PHP.

То есть там, где можно явно указать путь или параметр, лучше так и сделать. Пусть это хоть немного, но снизит нагрузку на сервер.

Следующий важный момент это бессмысленное использование функций _e() и __(). Суть этих функций в том, чтобы принять строку и перевести её. Рассмотрим такой код:

<h2><?php _e('Archives:'); ?></h2>

Казалось бы всё верно. Однако в результате мы просто получаем перевод "Archives:". То есть вся эта строка превращается до банального:

<h2>Архив:</h2>

и никаких PHP-функций. :-)

Другой пример:

<?php comments_number(__('No Comments'), __('1 Comment'), __('% Comments')); ?>

Здесь мы встречаем функцию __(). Действуем по аналогии и получаем в результате:

<?php comments_number('No Comments', '1 Comment', '% Comments'); ?>

То есть как минимум мы сократили вызов трех функций.

Иногда в шаблонах встречаются html-комментарии, в которых включен php-код, например:

<!--
<?php echo get_num_queries(); ?> queries. <?php timer_stop(1); ?> seconds.
-->

То есть здесь вызываются две функции, но результат всё равно не отображается на странице. Если этот вывод вам не нужен, то можно просто удалить такой код.

Важное замечание. Некоторые html-блоки должны выводиться в html-комментариях, например: стили, скрипты, rdf.

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

Плагины

Главное правило - деактивируйте все плагины, которые вы не используете. Многие плагины цепляются к различным событиям WordPress и работают, когда вы об этом даже не догадываетесь. Например, плагин "Контактная форма". Обычно под неё выделяют отдельную страничку, где и помещают код этого плагина. Но сам плагин написан таким образом, то вызывается при каждой загрузке страницы. Любой. Это можно наблюдать, если вы посмотрите в браузере html-код и увидите добавленный блог CSS-стилей. В принципе это довольно-таки безобидный плагин, поскольку добавляемый код очень незначителен и им можно пренебречь. Но суть, думаю, вам понятна.

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

Для того, чтобы отключить автоматическое выполнение ("срабатывание") плагина нужно в нем убрать (закомментировать) несколько строчек.

Учитывайте, что для этих действий у вас должен быть хороший уровень подготовки и знаний PHP!

Обычно для привязки функции плагина к какому-либо событию используют функции add_action() или add_filter(). Общего рецепта здесь нет, смотрите по коду.

Возможно, у вас есть такие плагины, которые являются необходимыми, но создают большую нагрузку. В этом случае можно попробовать создать файл с уже готовым html-кодом (созданным плагином), а после подключить готовый файл к шаблону с помощью readfile().

Особенности WordPress

На быстродействие WordPress будут влиять еще несколько факторов.

  • Количество и объём постоянных страниц. Чем их больше, тем большим будет обмен данными с базой данных. По возможности следует избегать ихчрезмерного использования, тем более, что по функциональности они почти такие же, как и обычные сообщения.
  • Количество опций. В WordPress отлично реализован механизм добавления и использования глобальных настроек. Это очень активно используется в плагинах, чтобы не создавать лишние таблицы в базе данных. Но, при всём этом существует проблема удаления ненужных данных. Например вы установили плагин, он вам не понравился и вы его удалили. Однако настройки плагина всё-равно остались в WordPress'е. Таким образом накапливается довольно существенный объем данных. Но главное здесь то, что в каждой такой опции есть параметр autoload, который указывает WordPress загружать его автоматически каждый раз. И по-умолчанию autoload включен и получается, что хоть плагин вы удалили, его параметры всё-равно загружаются.
  • Используйте кэш. WordPress достаточно эффективно использует кэш и этим может существенно снизить нагрузку на сервер. Но, в версиях старше 2.0.1, вкралась ошибка, отключающая этот кэш. Если вы еще не сделали обновление, то не откладывате на потом. Сразу скажу, что в официальной версии 2.0.5 этот баг также не исправлен. В моих же сборках после 22 сентября 2006 г. этот баг был исправлен.
google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

2 комментария к “Выпуск 19. Оптимизация WordPress”

  1. Volkman:

    Да, я просто изумляюсь популярной в wordpress технике конструирования специфических страниц наподобии контактной формы, когда захламляется весь вывод. Главное, что все это легко делается по-человечески. Код же того самого писателя контактной формы для его плагина по FAQ меня просто в истерику вогнал - куча javascript на ВСЕХ страницах, а, главное КАК этот плагинописец аякс "применил"...

    Что еще я бы порекомендовал для "оптимизации" чужих плагинов... У них многие функции и фильтры нужны только для админки. Если хватит квалификации, то лучше выделить весь этот код условным оператором типа if (in_admin()) { всякий код }, чтобы даже "мысли" не возникало это подключать в общедоступной части сайта.

    Еще момент... Самый главный запрос к базе (на записи) имеет среди параметров точную дату-время. В результате сам mysql этот запрос не кеширует (это НЕ кеш движка, очевидно). Этот код (добавление даты-времени) при необходимости можно закомментировать. При этом теряется функциональность - отложенная публикация.

  2. валерий:

    ".....Но главное здесь то, что в каждой такой опции есть параметр autoload, который указывает WordPress загружать его автоматически каждый раз. И по-умолчанию autoload включен и получается, что хоть плагин вы удалили, его параметры всё-равно загружаются. "

    а как от этого избавиться?!


Оставьте комментарий! (Вы согласны с правилами)

 

:mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

При добавлении кода (html, php) заменяйте < на &lt; и > на &gt;.
Внимание: антиспам - зверь! Копируйте своё сообщение перед отправкой. На всякий случай.