Оптимизация WordPress, W3 Total Cache и иже с ней

  1. Настроить кэширование страниц в виде статического контента, минимизировать размер страниц за счёт исключения лишних символов форматирования.
  2. Объединить css и js файлы, какие возможно (это важно, иначе могут перестать работать некоторые плагины). Так называемая минимизация количества и объёма загружаемых файлов.
  3. Выставить сжатие GZip. Это необходимо для уменьшения траффика (но увеличит нагрузку на процессор сервера).
  4. Установить кэширование запросов к БД и кэширование объектов.
  5. Разрешить браузеру кэшировать статический контент.
  6. Если есть возможность — настроить движок на использование акселератора PHP (например eAceelerator), а если очень постараться — то и memcached.

И вот, на таком обстоятельном пути к оптимизации выдачи, встаёт вопрос — как это сделать с минимальными потерями? Понятное дело, что нельзя просто установить плагин для генерации статических страниц, плагин для комбинации и минимизации подключаемых файлов, плагин включающий GZip, плагин, осуществляющий кэширование запросов и объектов, и прочее — по сути, ни один из распространённых плагинов не обеспечивает всего этого в комплексе, за исключением одного. Это уже упомянутый W3 Total Cache by W3 EDGE. Помимо прочего, ещё неизвестно, как поведут себя разнообразные связки плагинов, призванных увеличить быстродействие. По большому счёту — это лучший плагин, который я встречал (а на этом ресурсе я перепробовал как минимум штук 5), и который обеспечивает действительно неплохой прирост скорости загрузки (если верить Google Page Speed — до 10-15 единиц рейтинга). Ведь по идее, вебмастера в большинстве случаев интересует не абстрактный график пиковой нагрузки с разными плагинами, а вполне конкретные вещи — насколько быстро отдаются страницы, и начиная с какого уровня нагрузки сервер «падает». Причем, W3 Total Cache позволяет решать проблему именно в комплексе, т.е. он и выборочно минимизирует контент (сами выбираете, какие css и js файлы сжать, а какие оставить как есть), и генерирует статические страницы, и хранит их уже gzip-сжатые (!) копии статики на жёстком диске в кэше, т.е. отдача gzipped контента — не создаёт нагрузки на сервер, а выглядит всё также, как статический контент. Кроме того, он минимизирует объём кода, отдаваемого пользователю путём удаления символов форматирования из CSS и JS файлов. Плюс ко всему, позволяет установить в настройках напрямую хранилище кэша. Это может быть диск, либо один из нескольких PHP-акселераторов (eAccelerator, APC, и т. д.) либо Memcache — это возможно в том случае, если у вас хотя бы VPS.

Вот основной перечень возможностей этого плагина:

  • Кэширование страниц, возможны варианты кэширования: два вида дискового кэша, PHP-оптимизаторы (APC, eAccelerator, XCache), Memcache.
  • Минимизация страниц, посредством выборочной компиляции разных CSS и JS файлов в один CSS и JS файл (не знаю как объяснить, но, в общем, при тотальной оптимизации будет два файла, один CSS со всеми вашими CSS-ками, и один JS — со всеми JS файлами). Соответственно кэш почти тот же самый что и в случае с HTML, только нет режима enhanced для дискового кэша. Кроме того, позволяет уменьшать размер CSS, JS и HTML контента, путём удаления пробельных символов (все файлы выглядят как одна строка — браузеру всё равно, а траффик уменьшается). Будьте внимательны! Файлы могут вступать в конфликт из-за одинаковых имён стилей, переменных, функций. Соответственно часть функционала на сайте может отвалиться!
  • Кэширует запросы к базе данных, посредством всё той же системы из набора разных кэшей.
  • Кэширует объекты.
  • Позволяет использовать так называемый CDN (Content Delivery Network), об этой системе стоит рассказать отдельно. Дело в том, что существует «не-динамический», как правило никогда не изменяемый, или очень редко изменяемый, контент. Это CSS, JS файлы, статические HTML страницы, картинки, аудио-видео файлы… Как правило это всё — элементы вёрстки. Для того, чтобы страничка грузилась быстрее, идеально такие компоненты размещать на другом физическом хосте, с другим IP-адресом и быстрым соединением, чтобы Apache не тратил время на обработку запросов браузера на статический контент. Естественно, это не всегда возможно, в случае бюджетного хостинга — можно сказать никогда. Но, существует CDN, позволяющая хостить статический контент на сторонних серверах. Честно говоря, я с этим вопросом не разбирался, ибо не было необходимости, но в целях оптимизации wordpress — движка, а точнее минимизации времени загрузки страницы, если вопрос стоит остро, можно разобраться. При настройках по-умочанию CDN вопит, что надо переписать оригинальное имя хоста. Не знаю, как будет у вас, но у меня так. Существуют как коммерческие, так и бесплатные сервера CDN (и судя по всему, в настройках по-умолчанию указаны именно бесплатные сервера, хотя опять же говорю — не проверял, потому точно утверждать не могу, вообще — подобные сети должны быть платными, по логике).
  • Наконец, позволяет гибкую настройку процесса общения браузера с сервером. Для начала, стоит обратить внимание на разрешения кэширования страниц. Особенно рекомендую установить галочку Set entity tag (eTag) — она позволяет поддерживать кэш браузера в актуальном состоянии, в соответствии с изменениями на сервере. Также очень важно установить компрессию gzip. В зависимости от браузера, пользователю будет отдаваться либо обычный, несжатый контент, либо предварительно сжатый gzip-контент (что позволяет не создавать нагрузку на сервер при каждом обращении к странице). Остальные настройки по умолчанию можно оставить, либо — если разбираетесь в том, что там конкретно где, можете поэкспериментировать в соответствии с личными эстетическими предпочтениями.

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

Автор

Алекс Разгибалов

Сумасшедший мужчина, неопределённого возраста, наслаждающийся манией преследования. Паталогически недоверчив, эгоистичен, авторитарен. Вторичные диагнозы - программист и поц. Владеет английским языком на уровне около хренового разговорного. Также знаком с некоторыми другими языками. Интересуется всем и вся, за счёт чего в любой области знания являются поверхностными, неглубокими. Характер невыдержанный. Крепость - 55 градусов.

Оптимизация WordPress, W3 Total Cache и иже с ней: 5 комментариев

  1. Поставил на свой сайт W3 Total Cache http://www.benatar.ru. Хорошая вещь. На хостинге есть memcache — я туда кэширую запросы и объекты (кстати, что за объекты, так пока и не понял; но их много и кэшируются они хорошо). Страницы — на диск, ибо memcache у ht-systems маловат — 256 Мб на весь сервер.
    А вот бесплатных CDN в списке настроек, судя по всему, нет.
    Но я нашел один — http://www.coralcdn.org Сервер кэширования — имя_вашего_сайта.доменная_зона.nyud.net — нужно прописать в настройках кэша, а тип кэширования выбрать mirror. У меня уже частично заработало (файлы темы через CDN грузятся), посмотрю, даст ли какой-нибудь прирост.

    1. Вообще CDN сети предназначены для доставки контента с ближайшего к пользователю сервера. Я вот просто не уверен, что бесплатный сервис способен предоставить такую инфраструктуру.
      Да и в целом, как в моём случае оказалось, данный плагин увеличивал нагрузку на сервер во много раз (и время отклика тоже). Т.е. не ускорял, а наоборот, замедлял отдачу. Я подозреваю, это происходило из-за того, что он оптимизирован всё же для использования на VPS/VDS а не на shared-хостинге.

  2. Итак, CDN показала свою работоспособность по отношению к файлам больше 500 кБ. Но увы, все ее сервера находятся за бугром, потому бывают недоступны в наших краях. Пришлось отключить, а жаль — идея мне очень понравилась.
    Насчет нагрузки — у меня тоже не VDS, но скорость ощутимо подросла. Может быть стоило покопаться в настройках? Благо там их очень много, и некоторые на шаровом хостинге действительно будут только замедлять работу.

    1. Копался, причем активно и очень длительное время :) Нет, в принципе я вот задумываюсь со временем перейти на VPS или даже что-то посерьёзнее… Если финансы будут позволять :) В принципе, аренда collocation позволяет размещать свой сервер на площадке провайдера где-то за 2400-2500 т.р./мес. Естественно при этом получается хостинг абсолютно иного уровня и по надёжности и по быстродействию. Ну и лезвие 1U само по себе стоит где-то 30к, в среднем — такая сборочка включает в себя примерно двух-четырёхъядерный проц интел, 4-6 ГБ оперативки, 100 МБит сеть и 500-1000 Гб дискового пространства. Естественно, на хосте такого рода должен работать не один проект :) Как минимум какой-либо ресурс, который будет выводить в ноль стоимость аренды и понемногу окупать железо. А так, данная конфигурация позволяет очень и очень неплохую систему создать, с блэкджеком и шлюхами memcached, APC и nginx. Ну и хостинг нескольких доменов.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Собирать идеально - не обязательно, просто приблизительно соберите картинку (должен быть включен JavaScript).WordPress CAPTCHA