Оптимизация WordPress.Мысли вслух

18.05.2011

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

Сегодня я хочу поднять такую важную тему как техническая оптимизация WordPress. Почему это важно и зачем оно надо? Ответ простой — чем быстрее грузится ваш сайт, тем приятнее пользователю на нем находиться. В наше время никто не хочет ждать информацию, когда ее огромное количество. Не дождавшись загрузки вашего блога, пользователь просто уйдет в другое место. А нам этого не нужно, так ведь? К тому же, сайты с высокой скоростью лучше ранжируются поисковыми системами.

Техническая оптимизация WordPress, сводится, как правило, к двум краеугольным камням. Первое и главное — скорость загрузки сайта. Второе — валидный(технически правильный) код.

Уменьшаем количество запросов к базе данных

Каждый шаблон оформления содержит множество запросов к базе данных. Зачем? Шаблоны создаются максимально универсальными, чтобы они работали на любом блоге. В этом случае приходится жертвовать скоростью. Если вы просматривали код своего шаблона, вы наверняка обратили внимание на подобные вставки:

<?php echo get_option('home'); ?>

В этом примере код возвращает адрес главной страницы. Но зачем лишний раз спрашивать у БД эту информацию, если она неизменна? Это лишнее, поэтому такие вставки можно смело убирать, заменяя на ту информацию, которую возвращает запрос.

Вместо этого кода можно вставить такой:

http://gering111.com

В работе шаблона ничего не поменяется, а вот один запрос к БД мы уже убрали.

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

А тут я напишу список функций, которые можно заменить на вывод статической информации:

  • bloginfo(‘url’); — еще один способ вывести ссылку на главную
  • bloginfo(‘rss2_url’); — ссылка на RSS ленту блога
  • get_template_directory_uri(); — ссылка на папку с шаблоном
  • bloginfo(‘stylesheet_url’); — ссылка на файл CSS шаблона. Вообще, эта функция встречается очень часто, поэтому в зависимости от ее содержания — подставляйте нужные данные.

Уменьшаем количество плагинов

Все красивости так или иначе ухудшают техническое состояние блога. Но без некоторых никак нельзя обойтись по тем или иным причинам. Что делать? Подумайте перед тем, как внедрять тот или иной плагин, нужен ли он на самом деле и можно ли заменить его функционал прямой вставкой кода. Например, у меня в сайдбаре есть блок вывода самых комментируемых записей. Этот функционал можно добавить с помощью плагина, а можно поступить иначе, вставив нужный код на PHP. Как это сделать я описал в статье “Как вывести самые комментируемые посты”.

Влияние каждого плагина на скорость загрузки можно проверить и отключить ненужные (либо заменить менее прожорливыми аналогами) — как это сделать я описывал в этой статье.

Оптимизируем картинки на блоге

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

Для оптимизации картинок я использую сервис PunyPNG, меня устраивает его функционал. Он достаточно хорошо жмет картинки, понимает и JPG, и PNG. В общем, рекомендую.

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

Кэширование сайта и сжатие CSS, JS и HTML

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

Сейчас я использую плагин WP Super Cache в связке с WP Minify. На сервере установлен nginx.

Чем хорош данный плагин? Он раскладывает файлы кэша по папкам, откуда nginx их замечательно забирает, даже не используя PHP. Этот механизм очень хорошо ускоряет работу блога. Вообще, я считаю, в вопросе оптимизации WordPress едва ли не самое пристальное внимание следует уделить именно кэшированию.

Приведу несколько скриншотов, которые я сделал с помощью сервиса gtmetrix.com:

Без кэширования и сжатия по технологии Minify:

И вторая пара скриншотов, с включенным кэшированием и Minify:

Настраиваем Apache для сжатия отдаваемых страниц

Оптимизация WordPress. Веб-сервер Apache

Apache — самый распространенный веб-сервер в мире. Если у вас шаред хостинг — 90% что там стоит Apache. Он поддерживает технологию gzip сжатия, которая значительно ускоряет отдачу страницы посетителю. Как это делается? В корневой папке вашего блога есть файл htaccess, в котором нужно прописать этот код:

<FilesMatch «\.js.gz$»>
ForceType text/javascript
Header set Content-Encoding: gzip
</FilesMatch>
<FilesMatch «\.css.gz$»>
ForceType text/css
Header set Content-Encoding: gzip
</FilesMatch>
<FilesMatch «\.js$»>
ForceType text/javascript
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !».*Safari.*»
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)\.js$ $1\.js.gz [L]
ForceType text/javascript
</FilesMatch>
<FilesMatch «\.css$»>
ForceType text/css
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !».*Safari.*»
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)\.css$ $1\.css.gz [L]
ForceType text/css
</FilesMatch>

Пишем технически правильный код

Бесплатные шаблоны часто грешат невалидным кодом. Все это оттого, что их пишут не на продажу, поэтому о скорости работы и правильном коде мало задумываются. Есть, конечно, исключения… Но их настолько мало, что можно не учитывать. А зачем все это нужно, работает же, спросите вы. Поисковые боты подчиняются стандартам HTML, поэтому если у вас неверный код, поисковик попросту может не найти вашего контента на странице. По этому поводу Google пишет в своем руководстве для веб-мастеров:

  • Создайте сайт с четкой иерархией и текстовыми ссылками.
  • Убедитесь, что все ссылки работают. Проверьте правильность кода HTML.
  • Используйте для проверки сайта текстовый браузер, например Lynx, поскольку большинство сканеров поисковых систем видят сайт точно так же, как Lynx. Если из-за таких элементов, как JavaScript, файлы cookie, идентификаторы сеансов, фреймы, DHTML или Flash, просмотреть весь сайт с помощью текстового браузера не удается, то и сканерам поисковых систем, скорее всего, тоже будет трудно его обработать.

Я написал отдельную статью “Правила хорошего тона веб-разработки”, в которой описаны основные приемы хорошего кода. Если вы знакомы с версткой и языком разметки HTML — вам не составит особого труда разобраться с кодом вашего шаблона.

На сегодня хватит. Спасибо всем, кто осилил, статья получилась нудная и огромная Кому есть что добавить или высказать свое мнение — пишите в комментариях.

Удачного дня

follow us in feedly

,

Комментариев: 13

  1. Елена

    Нужный материал, я сейчас как раз занимаюсь ускорением блога и воспользуюсь вашими советами, спасибо!

    Ответить
  2. Андрей

    Самое действенное в повышении скорости является кэширование, потом объединение css файлов и отдельно js файлов, а сжатие критично для процессорного времени.

    Ответить
  3. Willie

    Отдавать сжатые GZIP’ом страницы — довольно спорная идея. От этого увеличивается нагрузка на сервер, и может оказаться так, что время на подготовку архива превзодет отдачу страницы «как есть», без сжатия.

    На мой взгляд, если страница весит 20 килобайт, не считая расунков — то сжимать ее нет особого смысла. А если рисунков много — то и подавно, JPEG’и ведь практически не сжимаются.

    Ответить
    • GerinG

      Насчет картинок — верно на 100%. Насчет общего gzip — спорно. Если у человека канал хотя бы в мегабит — загрузка не вызывает проблем и тогда сжатие вроде как и не актуально. А если я захожу через GPRS на свой сайт, с мобильного или находясь в дороге — каждый сэкономленный килобайт это не только время, но и деньги
      А в нашей стране еще очень многие люди имеют низкую скорость интернета, особенно живущие в провинции или сельской местности. Поэтому gzip еще долго будет актуальным

      Ответить
      • Иван

        «Отдавать сжатые GZIP’ом страницы — довольно спорная идея» — вот это как раз теория.
        Переносил сайт на WordPress с выделенного сервака Hetzner на минимальный дроплет в DO (1 ядро 512 Ram). Перепробовал почти все возможные способы оптимизации. Так как процессорное время и оперативка узкое место, стал выискивать что урезать Наткнулся на инфу про тестирование разных уровней сжатия GZIP. С точки зрения эффективности время на сжатие/ % сжатия оптимальные уровни сжатия 1 и 2. Замечу что в большинстве статей по оптимизации WP рекомендуют ставить уровень 6. Честно сказать заметной разницы по загрузке процессора при уровне 2 и 6 я не заметил, зато больший уровень сжатия делает страницу минимум на 30-50 КБ легче и скорость загрузки страниц вырастает на пару сотен милисекунд. А если у вас стоит Varnish то загрузка 1 ядра не поднимется выше 20-30% даже если на сайт одновременно ломанутся сотни посетителей. Мой совет ставьте gzip 6. Если боретесь даже за милисекунды скорости загрузки страницы и минимальный вес пробуйте и более высокие значения, но обязательно с кэшем.

        Ответить
  4. Яковенко Алексей

    Здравствуйте, очень полезная и познавательная статья. Я сейчас как — раз работаю над мини — курсом по технической оптимизации. Много интересного для себя подчеркнул. Кому интересен мини — курс — добро пожаловать на мой сайт http://google.ru/

    Ответить
  5. pavka

    Да там пол движка надо переписать=) чтобы оптимизировать

    Ответить
  6. Menwyy's it blog

    На счет настройки Апач-а вы бы расписали. И лучше, имхо, не привязываться к конкретной панели управления, а использовать .htaccess.

    Ответить
    • GerinG

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

      Ответить