Компания
56,75
рейтинг
14 августа 2014 в 11:52

Разное → Оптимизации WordPress. Часть 2. Итоги конкурсa «ВПС на год за лучшие идеи!»

В первой части статьи мы рассказали об оптимизации Wordpress. Наши читатели продолжили эксперименты и составили расширенный набор рекомендаций, результаты которых опубликованы в этой статье. За это время мы добавили шаблоны для WordPress и Joomla в облачные VPS, позволяющие быстро развернуть нужную CMS на мощных и быстрых облачных серверах.

Спасибо всем, принявшим участие в конкурсе. Лучшему автору мы подарим год VPS 1024 от Infobox. Кому из участников конкурса подарить VPS 1024 на год — решаете вы. Голосование в конце статьи. Так же можно принять участие в аналогичном конкурсе по Joomla. Если у вас есть другие идеи по оптимизации — пишите в комментариях и получайте 300 рублей на облачный хостинг Infobox Jelastic за хорошие советы.



Под катом советы читателей по оптимизации Wordpress (без изменений), ссылка на бесплатное тестирование облачных VPS, a так же возможность выбрать лучшего автора.

Советы от пользователя Александра


1. Используем хороший хостинг (а лучше впс купить, тем более в последнее время появились очень дешевые тарифы)

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

3. Оптимизируем код, оптимизируем скрипты, оптимизируем изображения.

4. Оптимизируем базу данных плагином Optimize DB.

Можно использовать запросы:
DELETE FROM wp_posts WHERE post_type = "revision"     - очистка ревизий постов
DELETE FROM wp_posts WHERE post_status = 'trash'      - очистка корзины

5. Удаляем, а также исправляем битые ссылки — плагином Broken Link Checker

6. Отключаем ревизии постов. Для этого в корне движка найдите файл wp-config.php, откройте его на редактирование и в самое начало, обязательно после тега <?php, вставьте следующую строку:
define('WP_POST_REVISIONS', false);

Или другой вариант отключения ревизий. Необходимо изменить одно из значений с «true» на «0» или «false» в функции wp_functionality_constants(), которая находится в файле /wp-includes/default-constants.php
if ( !defined('WP_POST_REVISIONS') )
define('WP_POST_REVISIONS', false);

7. Отключаем руссификацию админки, путем удаления из файла wp-config.php строки:
define ('WPLANG', 'ru_RU');

Руссификация админки вордпресса использует около 7MB памяти.

8. Отключаем корзину:
wp-config.php. В самое начало, обязательно после тега <?php, вставьте следующую строку:
define('EMPTY_TRASH_DAYS', 0);

9. Обязательно используем плагин кэширования. Рекомендую W3 Total Cache.

10. Также, можно отключить проверку обновлений, установив плагин — Disable WordPress Updates
(осторожно, отключение обновлений может крайне негативно сказаться на безопасности сайта)

Дополнения

1. Чтобы узнать нагрузку, которую создает сайт, можно вставить в шаблон следующий код (вставляем в файл темы footer.php)
<?php
echo "Статистика:" . get_num_queries() . "/ "; timer_stop(1);
echo "s/ ". round(memory_get_usage()/1024/1024, 2) . " MB ";
?>


2. Увеличить скорость загрузки большой страницы (с графикой) можно плагином BJ Lazy Load
Данный плагин выполняет загрузку только тех картинок, которые видны на экране. Когда быстро скролишь страницу, то можно будет увидеть, как постепенно загружаются и появляются изображения. Плагин будет постепенно загружать картинки по мере пролистывания страницы, что в свою степень будет сохранять трафик и ускорять загрузку страницы.

3. Очень настоятельно рекомендую создать мобильную версию портала.

4. Рекомендую протестировать сайт вот этим сервисом: http://developers.google.com/speed/pagespeed/insights/
Данным сервисом можно узнать проблемные места на блоге, которые снижают скорость работы сайта. А также сервис предоставляет рекомендации, и их желательно выполнить.

Советы от пользователя Rail


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

Kартинки можно ужимать до публикации, а верстать шаблон для сайта с применением удобных инструментов как Yeoman/Grunt/Gulp — в таком случае картинки, js и css будут уже изначально ужаты и оптимизированы.

Также рекомендую проанализировать сайт встроенным аудитом в Chrome — F12 -> Audits -> Run
Этот инструмент локальный аналог Google Insights. Например в нем можно увидеть процент неиспользованного css дабы выпилить его.Если на сайте используются сложные JS-эффекты то можно пройтись до вкладки Profiles и нажать Start. В профилировщике можно увидеть сколько % времени отняла каждая js-функция и замерить fps на сайте.

Полезные ссылки:
https://developer.chrome.com/devtools/docs/cpu-profiling
https://developer.chrome.com/devtools/docs/javascript-memory-profiling

CSS в шаблоне стоит размещать ближе к верху страницы, а JS желательно в самом низу.

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

Если на сервере крутится небольшое количество сайтов, то есть смысл исключить из стека Apache заменив его на Nginx. Хороший док по настройке Nginx для WP есть в кодексе — http://codex.wordpress.org/Nginx

Для PHP < 5.5 лучше поставить опкешер APC или Xcache. В 5.5 есть уже встроенный опкэшер. У APC и у Xcache в дистрибутиве имеются панели для отображения статуса кэша в реальном в времени (% попадания данных в кэш). Согласно этим данным можно подкрутить настройки кэширования для оптимальной работы.

Также полезным делом будет запустить mysqltuner.pl и подкрутить настройки MySQL-сервера согласно рекомендациям утилиты.

Для ускорения самого Wordpress я бы посоветовал немного подкрутить wp-config.php — http://codex.wordpress.org/Editing_wp-config.php. Так к примеру есть возможность прописать название и слоган сайта прямо в конфиге и сэкономить на паре запросов к БД или же включить режим дебага.

Для тестов рекомендую еще вот эти сервисы:
http://tools.pingdom.com/fpt/ — тестирование скорости загрузки
http://loadimpact.com — нагрузочное тестирование

Пробная версия Cloud VPS от Infobox


Для того, чтобы вы смогли попробовать установить и оптимизировать Wordpress, мы предоставляем пробную версию Cloud VPS на 15 дней бесплатно. Регистрируйтесь по ссылке.

Успешных оптимизаций Wordpress!
Кому из участников конкурса «ВПС за лучшие идеи» подарить VPS на год?
52%
(62)
Александр
48%
(58)
Rail

Проголосовало 120 человек. Воздержалось 96 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Автор: @infobox
Infobox
рейтинг 56,75

Комментарии (37)

  • +7
    >> 1. Используем хороший хостинг (а лучше впс купить, тем более в последнее время появились очень дешевые тарифы)
    >> 3. Оптимизируем код, оптимизируем скрипты, оптимизируем изображения.

    Мне одному кажется, что это не советы по оптимизации именно WP?

    >> 2. Отключаем неиспользуемые плагины, по возможности заменяем их кодами.

    А чем «плагин» — не «код»?:)

    • –3
      Еще не поздно принять участие в конкурсе по Joomla и победить в нем :)
    • +5
      Вообще, пост какой-то странный. Первая часть лично мне показалась интереснее.
      Описаные «секреты» — это какие-то такие простые вещи, которые писать на Хабре смысла нет.
      В голосование нужно добавить пункт «Никому».
      • 0
        Надо наградить принявших участие в конкурсе. Другие то не написали — только за смелость уже можно дать приз. Конечно нужно делать скидку на то, что уровень читателей может быть разным. Принимайте участие в конкурсах, пишите крутые статьи и побеждайте! К тому же можно дать совет по оптимизации в комментариях, и если он будет хорошим — получите 300 рублей на счет Infobox Jelastic.
        • +1
          Может быть никто не писал Вам потому что никому не интересен приз?
          • 0
            Авторам статей, которые мы выберем для публикации (связанные с сервисами Infobox и InfoboxCloud), мы пополняем счет на серьезную сумму в облачном хостинге Infobox Jelastic (поддерживается PHP, Java, Python, Ruby, SQL, NoSQL базы и многое другое в 1 клик с автоскейлингом без необходимости администрирования ОС и первоначальной настройки программных стеков). Подробности по email: trukhinyuri@infoboxcloud.com. Ключевое — качественный контент, полезный для пользователей и еще не рассмотренный нами.
            • –1
              А зачем столько ссылок на сайт в каждом ответе?
              • +1
                У гиперссылок есть преимущество перед простым текстом: если не надо — можно не нажимать, а если надо — удобно быстро перейти на страницу или написать письмо. Просто для удобства.
    • 0
      Вероятно, подразумевается выполнение определенного кода в functions.php вместо обертки этого кода в плагин. Это немного быстрее, т.к. на инициализацию плагинов тратятся хоть и небольшие, но все же, ресурсы сервера.
      • 0
        Ничего подобного. Один и тот же код в плагине или в functions.php выполняется с одной и той же скоростью. Разница только в том, когда он будет выполнен. Код в плагине выполняется раньше, чем код в functions.php, что имеет свои положительные стороны. В остальном, как раз хорошая и правильная практика — выносить функционал в плагины. Инициализация плагинов отнимает время только если это комплексные плагины со своими библиотеками, лоадерами и т.д. Но тут без вариантов — такой код вы и при желании в functions.php не засунете.
  • +3
    Кого волнует отрисовка страницы с плеерами ютуба
    wordpress.org/plugins/youtube-speedload/
    • –4
      Хороший совет. За хорошие советы комментаторам даем по 300 рублей на облачный хостинг Jelastic:) Зарегистрируйтесь на infobox.ru/hosting/cloud/ и пришлите логин на trukhinyuri@infoboxcloud.com. После окончания пробной версии пополним вам счет.
  • 0
    Битва не на шутку =)
    Советы хорошие, но вот отключение проверки обновлений довольно спорная штука на мой взгляд. Постоянно мониторить новости с критических багах в WP и следить за релизами сэкономив пару мегабайт памяти на отключении автоматической проверки думаю не лучшая идея.
    • –1
      100% так, отключение обновлений опасно. Поэтому курсивом дописали об этом под рекомендацией.
  • +1
    Можно установить такие плагины как:
    1) DB Cache Reloaded Fix — кэширование запросов к БД
    2) WP Minify — сжатие css/js

    Также забыли про Memcached.
    Увеличение размера SWAP-файла (мне в свое время очень помогло когда БД начала часто падать).
    Использование async в js (так быстрее отрисовывается страница, но это больше для удобства пользователя, есть даже плагин wordpress.org/plugins/asynchronous-javascript/).
    И вместо картинок можно юзать css иконки. symbolset.com/icons/gizmo
    И конечно же если у Вас аудитория не только Россия, Украина, то желательно подключить CDN.
    • –2
      Хороший совет. За хорошие советы комментаторам даем по 300 рублей на облачный хостинг Jelastic:) Зарегистрируйтесь на infobox.ru/hosting/cloud/ и пришлите логин на trukhinyuri@infoboxcloud.com. После окончания пробной версии пополним вам счет.
  • +1
    Советуют отключать плагины, и тут же речь ведется о плагине Disable WordPress Updates, когда все делается проще
    codex.wordpress.org/Configuring_Automatic_Background_Updates
    • –2
      Хотя и совет очевидный, но 300 рублей на Jelastic получите, тк может кому-то помочь. Зарегистрируйтесь на infobox.ru/hosting/cloud/ и пришлите логин на trukhinyuri@infoboxcloud.com. После окончания пробной версии пополним вам счет.
  • +1
    Седьмой пункт сверху. Удаление define ('WPLANG', 'ru_RU'); отключает локализацию вообще всю.
    • 0
      Создаем урезанный файл перевода, откуда выбрасываем перевод админки, затем заменяем:
      define ('WPLANG', 'ru_RU');

      на:
      if (strpos($_SERVER['REQUEST_URI'], 'wp-admin')) define ('WPLANG', 'ru_RU'); else define ('WPLANG', 'ru_RU_lite');


      Как результат память разгрузится на количество удаленного перевода.

      p.s. подробнее — _http://lecactus.ru/2008/11/15/3110/

      • –1
        300 рублей на Infobox Jelastic за ответ:)
    • 0
      Начиная с версии 4.0 данная константа не используется и ее наличие или отсутствие погоды не делает. Учитывая, что 4й версии уже пару месяцев, пора почитать Changelog.
  • +2
    Ставим wp-supercache, натравливаем nginx на папку с кэшем:
    # Use cached or actual file if they exists, otherwise pass request to WordPress
    location / {
            try_files /wp-content/cache/supercache/$http_host/$cache_uri/index.html $uri $uri/ /index.php?$args ;
    }    
    


    Первое обращение к странице создаст нам статическую копию в .html (используя php, mysql и т.д.), все последующие обращения будут обрабатываться только nginx'ом (банальная выдача статики)

    Метод не подходит, если у вас часто обновляется контент на странице.
    • 0
      Можно вообще избавиться от кеширующего плагина и обойтись только кешированием NGINX:
      # Don't cache uris containing the following segments
      if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-[^/]*\.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
              set $no_cache 1;
      }   
      
      # Don't use the cache for logged in users or recent commenters
      if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
              set $no_cache 1;
      }
      # Pass all .php files onto a php-fpm/php-fcgi server.
      location ~ \.php$ {
      	try_files $uri =404;
      	fastcgi_split_path_info ^(.+\.php)(/.+)$;
      	include fastcgi_params;
      	fastcgi_index index.php;
      	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      	fastcgi_intercept_errors on;
      	fastcgi_pass php;
      	fastcgi_cache_bypass $no_cache;
      	fastcgi_no_cache $no_cache;
      	fastcgi_cache WORDPRESS;
      	fastcgi_cache_valid  720m;
      }
      


      В данном случае все страницы кешируются на шесть часов (сайт не использует комменты и прочую интерактивность).
  • +4
    Главное ребята отключайте проверку обновлений, и через некоторое время у вас будет оптимальный сайт, с красивым веб-шеллом, дорами разложенными по папочкам или ссылками на разные интересные и не очень сайты.

    Чтобы не заморачиваться с мускулем для очистки ревизий, есть отличные плагины типа Revision Control.

    В целом советы, эти, являются выжимкой из выдачи гугла или яндекса по запросу оптимизация wordpress, только те, кто их копипастили, не учли, что некоторые статьи уже немного устарели и могут не только не дать положительного эффекта, но еще и навредить.
    • 0
      Если сайт сильно нужный и он один, то можно сильно заморочиться. К примеру плагин для очистки ревизий хоть немного да добавляет тормозов — поэтому ревизии чистим bash-скриптом по крону глубокой ночью. Чуть выше также довольно интересный совет с перекидыванием всей статики на плечи Nginx.

      Увы и ах советы в данном посте не могут быть 100% уникальными т.к., на минуточку, Wordpress самая популярная CMS на планете и изучена вдоль и поперек. Но если вдруг получится хороший пост с выжимкой наиболее полезных советов (и описанием действий вместе с возможными подводными камнями), то не грех будет добавить его в избранное и почитывать иногда. И да, он тоже через некоторе время устареет.
      • 0
        Их не нужно чистить баш скриптом по крону, хоть днем хоть ночью, потому что те кому они не нужны, могут их отключить и очистить всего один раз.
        А на счет «выжимки наиболее полезных советов» и «описаний действий», так это не про этот пост :)
        • 0
          Ну вы же пишете что нужно для ревизий поставить плагин который будет их автоматом подчищать, значит хотя бы на какое то время ревизии нужны. Я предложил чистить их по крону как менее затратный вариант =)
          Самое интересное что многие кто работают с WP даже и не в курсе что там есть «какие то ревизии» =)

          Ну в целом я согласен с вами что данный пост довольно трудно будет определить как кладезь полезной и актуальной информации по оптимизации WP, но какие то полезные фишки все же здесь можно найти.
          • 0
            Я пишу, что этот плагин Revision Control, как можно понять из названия, предназначен для управления ревизиями, умеет включать, отключать, удалять, оставлять определенное количество, что облегчает конечному пользователю всю эту мороку (mysql, bash, консоль и тп) с неизвестными никому ревизиями, но если их назвать редакциями документа, то все становится понятным.
            • 0
              От того что кто-то назовет это ревизией, а кто-то редакцией суть функционала не меняется. Просто говорю что знаю многих людей которые внезапно даже и не догадываются о таком функционале.

              Я просто к тому что кому нужны удобства — будут ставить еще один плагин к 100500 уже имеющимся. Лично мне не по нраву когда на сайте набирается даже десяток плагинов тем более что функционал некоторых из них можно заменить bash-скриптом из пары строчек. Так что каждому свое. Хорошо когда у одной задачи есть много вариантов решения.
    • 0
      Про выжимку полностью согласен.
      Что до обновлений, то я их везде отключаю полностью, но у меня всем управляет InfiniteWP, это очень удобно.
    • 0
      Как админ в т.ч. хостинга не могу не согласиться — на Ваш сайт очень быстро обратит внимание хостер, после того как вебшеллы откуда-то из wp-content/themes/какая-то_тема_сделанная_Васей_за 10_баксов сделают la ~1000 на виртуалке… и попробуйте потом сменить права с chattr -R +i, если на файлах будет chmod 0000, любезно установленный админом для супербыстрой загрузки Вашего сайта.
      а WP кстати недавно научился вообще фоном обновляться. Правда, насчёт плагинов и тем не знаю, не вникал подробно
  • 0
    Кстати, несколько слов о безопасности (пост просто немного не об этом).
    — Если не пользуемся XML-RPC — то запрещаем к нему доступ
    — /wp-admin хотя бы HTTP Basic Auth'ом прикрыть или HTTP Digest, естественно пароли не совпадающие с паролями от админки
    — Вообще адрес самой админки вроде как можно поменять, а забавы ради на /wp-admin повесить заглушку один в один повторяющую форму входа в WP, только вместо авторизации старательно записывать логи по атакующим.
    • +1
      Или вместо 200-го ответа, при ошибке авторизации, делаем 403, и на логи натравливаем fail2ban.
  • 0
    Странно както сравнивать эти советы: первые относяться к вп, но по большей части все эти советы легко находяться в 2-3х статьях из гугла/яндекса. Вторые больше отнояться к общей оптимизации, которая практически не зависит от двжика. ИМХО
  • 0
    Забыли сказать про минификацию JS/CSS. В WP для этого есть хорошие плагины.

    Ну и отключение обновлений / экономия одного запроса к БД — это экономия на спичках. По сравнению с кешированием и opcache и избавлением от 404 эффект мизерный. Также можно не запариваться с чисткой от старых постов если не используются плагины с выборками по кастом-полям постов (при использовании кастом-полей индексы не используются, в остальных случаях — используются и скорость почти не зависит от наличия мусора).
  • 0
    Какой именно плагин из ссылки Optimize DB рекомендуете?

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

Самое читаемое Разное