Выпуск 19. Оптимизация WordPress
Оптимизация 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 г. этот баг был исправлен.
Постоянная ссылка: http://maxsite.org/?p=151
Версия для печати
