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. Кстати, хостинг у меня теперь украинский, и сайт, для основной части аудитории, теперь будет просто летать…
Экстраполяция графика затрат памяти не весела, но похоже, что так и будет :(
Теперь блог живет на мирохосте?
Что-то цены великоваты у них, и не указано процессорное время на аккаунт.
З.Ы. Поправьте в футере год :) уже 2010
Вы упомянули украинский хостинг, не могли вы сказать, какой именно вы имели в виду?
А по айпи трудно пробить?
Да ну вы что, я ж умру от спама, если Akismet отключить. Предлагайте тогда более производительные альтернативы, на что можно заменить.
Использую WP-SpamFree, результатом очень даже доволен…
а я себе поставил Dcapcha и очень даволен. Спам комментарие просто нет! А Akismet ведь комментарии пропускает… только ложит их в спам…. а что толку :)
Я тоже использую Dcapcha, спам комментарии просто пропали, хотя сложность добавления комментария на блог возрасла всего на одну галочку :) Очень даволен этим плагином!
Кстати, график не отражает реальное положение дел, как я писал в своей статье о WordPress 2.9, а потом и в статье о хостинге, на shared hosting’е от FreeHost.com.ua у меня нулевый WordPress 2.8.4, а потом и 2.9 жрал больше 32 мб ОЗУ (в админке), причем мне поступали различные комментарии, что у кого-то он потребляет примерно такое же количество ОЗУ, а у кого-то вообще меньше 10 мб.
Видимо это зависит от системы. Ну ё, 64-битная она у фрихоста, что-ли? 0_o
А за SQL для чистки БД спасибо, очень полезная вещь.
Что-то мой второй комментарий не запостился, видимо спаморезка из-за ссылок порубала. Антон, посмотрите пожалуйста в спаме.
За последнее время дополнительный платеж за хостинг превысил 10 $ из-за нагрузки 40 блогов на WP, так что ваша статья сэкономит мне по 10 баксов в месяц, а то и больше =)
Решение с запароливанием админки средствами апача – элегантно :) Почему этим никто не пользуется? :)
Хм.. задумался на счет акимсета, нужно будет проверить вп-спам фрии, спасибо за наводку
Заранее извиняюсь за возможно ламерский вопрос .. но как блог вообще может есть 500-600 MB памяти? это не опечатка? я вот сейчас к VDS хостингу присматриваюсь – там написано что доступно оперативной памяти 128Mb :) Как это понимать?
Спасибо автору за содержательные статьи!! Но вот я, например, свой убогенький сайт на WP, и так мучал, и сяк, но лучшие результаты показал DB Cache Reload, с включенным акисметом и еще кучей никчемных плагинов, по тестам у меня и у Вас одно время загрузки главной страницы и навигации, хотя сайз у меня раз в 5 побаче будет; Обратите внимание на этот плагин, вы специалист, быстро в нем разберетесь..