WordPress Quick Tricks #02. Оптимизация

WordPress – одна из самых популярных CMS, но что мешает накидать им несколько камней в огород?

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

Дабы было наглядней – продемонстрирую график использования памяти wordpress’ом, который построил Макс:

Кэшируем

Вначале мой взгляд упал на репозиторий плагинов WordPress, я вытащил оттель WP Super Cache плагин – хостингу конечно полегчало – но не так, чтобы супер, ведь до начала работы данного плагина, двиг WP должен таки подняться. Потом нашел MaxCache, смысл данного кеширования – определять попадание в кэш до загрузки WP, и этот прирост производительности стал существенным – LA сервера упал с ~1.0-1.6 до ~0.2-0.4, памяти кушать стали тоже меньше – 634Mb > 525Mb.

Отключаем плагины

Кроме самого движка, очень солидную часть нагрузки создают кривые и не очень плагины. Пока у меня на примете лишь два плагина, которые я благополучно отключил:

  • Akismet – алгоритм данной защиты предполагает отправку комментариев на сервис для проверки – но при >200 спам комментариев – это напрягает
  • WP-PostViews – это просто примочка – смысл работы – после загрузки страницы AJAX’ом стучится на сервер для инкрементации счетчика – т.е. для отображения страницы у вас дважды поднимается движек WP

Если сталкивались с еще какими “чудными” плагинами – отпишитесь в комментариях…

Оптимизируем БД

Небольшой запрос на удаление мусора из БД (взято отсель).

// удаляем ревизии постов и все, что с ними связано
DELETE `p`, `pm`, `c`, `tr`
  FROM `wp_posts` AS `p`
    LEFT JOIN `wp_postmeta` AS `pm`
        ON `p`.`ID` = `pm`.`post_id`
    LEFT JOIN `wp_comments` AS `c`
        ON `p`.`ID` = `c`.`comment_post_ID`
    LEFT JOIN `wp_term_relationships` AS `tr`
        ON `p`.`ID` = `tr`.`object_id`
  WHERE 
        `p`.`post_type` = 'revision';

// запускаем встроенные механизмы оптимизации
OPTIMIZE TABLE
    `wp_posts`,
    `wp_postmeta`,
    `wp_comments`,
    `wp_term_relationships`; 

Защита

Скажите “к чему это тут”, а нет – тут самое место – достаточно часто админка популярных блогов подвергается атаке, а это тоже забирает ресурсы. Как по мне – самый лучший способ – это правильно настроенный htaccess для директории /wp-admin/:

  • Ограничить доступ по IP
    order deny,allow
    deny from all
    allow from 255.255.255.255
    
  • Добавить аутентификацию средствами Apache

Клиентская оптимизация

Ох, тут можно рассказывать очень много, я лишь скину ссылку на тематический сайт – webo.in – а там вы найдете много материала, копипастить нет смысла, скажу лишь так – данная оптимизация станет критичной уже при десятке тысяч посетителей, я же остановился на небольшой правке файла .htaccess:

# Enable ETag
FileETag MTime Size

# Enable Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript

<ifModule mod_expires.c>;
  ExpiresActive On
  ExpiresDefault 'access plus 1 seconds'
  ExpiresByType text/html 'access plus 1 seconds'
  ExpiresByType image/x-icon 'access plus 2592000 seconds'
  ExpiresByType image/gif 'access plus 2592000 seconds'
  ExpiresByType image/jpeg 'access plus 2592000 seconds'
  ExpiresByType image/png 'access plus 2592000 seconds'
  ExpiresByType text/css 'access plus 604800 seconds'
  ExpiresByType text/javascript 'access plus 216000 seconds'
  ExpiresByType application/x-javascript 'access plus 216000 seconds'
</ifModule>

Результаты данного изменения отслеживал при помощи Firefox+Firebug+YSlow, вот собственно и скрины ДО и ПОСЛЕ изменений:

P.S. Кстати, хостинг у меня теперь украинский, и сайт, для основной части аудитории, теперь будет просто летать…

14 thoughts on “WordPress Quick Tricks #02. Оптимизация”

  1. Экстраполяция графика затрат памяти не весела, но похоже, что так и будет :(

    Теперь блог живет на мирохосте?
    Что-то цены великоваты у них, и не указано процессорное время на аккаунт.

    З.Ы. Поправьте в футере год :) уже 2010

  2. Вы упомянули украинский хостинг, не могли вы сказать, какой именно вы имели в виду?

  3. Да ну вы что, я ж умру от спама, если Akismet отключить. Предлагайте тогда более производительные альтернативы, на что можно заменить.

    1. а я себе поставил Dcapcha и очень даволен. Спам комментарие просто нет! А Akismet ведь комментарии пропускает… только ложит их в спам…. а что толку :)

      1. Я тоже использую Dcapcha, спам комментарии просто пропали, хотя сложность добавления комментария на блог возрасла всего на одну галочку :) Очень даволен этим плагином!

  4. Кстати, график не отражает реальное положение дел, как я писал в своей статье о WordPress 2.9, а потом и в статье о хостинге, на shared hosting’е от FreeHost.com.ua у меня нулевый WordPress 2.8.4, а потом и 2.9 жрал больше 32 мб ОЗУ (в админке), причем мне поступали различные комментарии, что у кого-то он потребляет примерно такое же количество ОЗУ, а у кого-то вообще меньше 10 мб.

    Видимо это зависит от системы. Ну ё, 64-битная она у фрихоста, что-ли? 0_o

    А за SQL для чистки БД спасибо, очень полезная вещь.

  5. Что-то мой второй комментарий не запостился, видимо спаморезка из-за ссылок порубала. Антон, посмотрите пожалуйста в спаме.

  6. За последнее время дополнительный платеж за хостинг превысил 10 $ из-за нагрузки 40 блогов на WP, так что ваша статья сэкономит мне по 10 баксов в месяц, а то и больше =)

  7. Решение с запароливанием админки средствами апача – элегантно :) Почему этим никто не пользуется? :)

  8. Хм.. задумался на счет акимсета, нужно будет проверить вп-спам фрии, спасибо за наводку

  9. Заранее извиняюсь за возможно ламерский вопрос .. но как блог вообще может есть 500-600 MB памяти? это не опечатка? я вот сейчас к VDS хостингу присматриваюсь – там написано что доступно оперативной памяти 128Mb :) Как это понимать?

  10. Спасибо автору за содержательные статьи!! Но вот я, например, свой убогенький сайт на WP, и так мучал, и сяк, но лучшие результаты показал DB Cache Reload, с включенным акисметом и еще кучей никчемных плагинов, по тестам у меня и у Вас одно время загрузки главной страницы и навигации, хотя сайз у меня раз в 5 побаче будет; Обратите внимание на этот плагин, вы специалист, быстро в нем разберетесь..

Comments are closed.