Статьи

Полное руководство по оптимизации производительности WordPress

По данным Builtwith.com , WordPress владеет почти 50% доли CMS в топ- 100 000 сайтов в мире. Что касается сферы электронной коммерции, мы находимся на 33% с WooCommerce. И если мы разыгрываем более широкую сеть, проценты идут выше. Хотя мы можем жаловаться, что WordPress может стать раздутым, ресурсоемким, а его модель данных оставляет желать лучшего, нельзя отрицать, что WordPress есть везде.

Статистика программного обеспечения для электронной коммерции от builtwith.com

WordPress может поблагодарить за его простоту и низкий барьер для входа для этой распространенности. Это легко настроить, и не требует почти никаких технических знаний. Хостинг для WordPress можно найти всего за пару долларов в месяц, а базовая настройка занимает всего полчаса. Бесплатные темы для WordPress — в изобилии, некоторые со встроенными конструкторами страниц WYSIWYG.

Многие смотрят на это свысока, но во многих отношениях мы можем поблагодарить WordPress за рост интернета и PHP, и у многих интернет-профессионалов есть небольшая кривая обучения WP, чтобы поблагодарить их за карьеру.

Но эта простота въезда обходится дорого. Многие веб-сайты, которые с гордостью носят значок WordPress, были сделаны не профессионалами, а самыми дешевыми разработчиками. И часто это видно. Профессиональный вид и профессиональное исполнение были запоздалыми.

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

lingscars.com

Известный британский дилер подержанных автомобилей, Ling’s Cars, попробовал уникальный способ сделать китч маркетинговой изюминкой. Если вы ДЕЙСТВИТЕЛЬНО не уверены в том, что делаете, НЕ пытайтесь делать это дома.

И это начинается с …

Выбор хостинга

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

Мы можем разделить поставщиков хостинга WordPress на несколько уровней.

Премиум- провайдеры , специализирующиеся на WordPress, такие как Kinsta, чьи планы начинаются со 100 долларов в месяц, или даже более качественный управляемый хостинг, такой как WordPress VIP от Automattic, могут стоить того, но также могут быть недоступны для многих владельцев веб-сайтов.

Маховик среднего уровня, хостинг А2 , Siteground и Pantheon относятся к числу тех, которые считаются надежными и ориентированными на производительность, предлагая приемлемую скорость и услугу управляемого хостинга для тех, кто ценит цены. Пользователи здесь могут получить немного меньше возможностей, но эти услуги обычно находят приемлемый баланс между надежной настройкой, ценой и опциями для более продвинутых пользователей. Не забывайте, есть Cloudways , который является гибридом между VPS и управляемым хостингом. Те, у кого есть европейская аудитория, могут заглянуть в Pilvia , поскольку она предлагает высокопроизводительный серверный стек и является довольно доступным

Есть интересный обзор удовлетворенности клиентов более известными поставщиками хостинга, опубликованный Codeinwp .

Для тех из нас, кто не боится командной строки, есть производители VPS и выделенных серверов, такие как Digital Ocean , Vultr , Linode , Amazon Lightsail , Hetzner в Европе и OVH . Hetzner — немецкий поставщик, известный своими качественными физическими серверами, несколько превышающими цену виртуальных серверов, в то время как OVH предлагает очень экономичные виртуальные серверы . Для разумных цен дочерняя компания OVH Kimsufi в Европе и Канаде также предлагает специальные физические выделенные серверы, а Host US предлагает очень доступные виртуальные серверы.

С управляемым хостингом нужно искать хороший стек серверов , хорошую интеграцию CDN и, конечно, SSD-хранилище. Гарантированные ресурсы, как с A2 , являются большим плюсом. Следующее, что нужно искать, это SSH-доступ. Технически подкованные пользователи могут получить выгоду от доступности WP-CLI .

При выборе VPS следует обратить внимание на виртуализацию XEN или KVM поверх OpenVZ, поскольку она снижает перепроданность ресурсов, гарантируя, что купленные вами ресурсы действительно принадлежат вам. Это также обеспечивает лучшую безопасность.

Easy Engine — это программа, которая может сделать всю вашу установку VPS / WordPress за один час.

Что касается стека серверов, Nginx предпочтительнее Apache, если мы стремимся к производительности, а PHP 7 — необходимость. Если нам действительно нужен Apache, использование Nginx в качестве обратного прокси-сервера является плюсом, но эта настройка может стать сложной.

Проведенные тесты дают PHP 7 большое преимущество перед предыдущей версией. Согласно fasthosts.co.uk :

WordPress 4.1 выполнял на 95% больше запросов в секунду на PHP 7 по сравнению с PHP 5.6.

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

Вопросы программного обеспечения

Вещи, которые обычно замедляют работу сайтов WordPress, являются громоздкими, раздутыми интерфейсами с большим количеством статических ресурсов и запросов к базе данных. Эти проблемы возникают из-за выбора темы (и ее создателей страниц, огромных ползунков и т. Д.), Которые не только замедляют первоначальную загрузку из-за большого количества запросов и общего размера, но часто замедляют работу браузера из-за большого количества JavaScript и прочего сделать, что делает его безразличным.

Золотое правило здесь: не используйте его, если нет веской причины для этого.

Это может показаться правилом, исходящим из уст Гомера Симпсона, но если вы можете пропустить какой-либо из наворотов, сделайте это. Будьте консервативны. Если вам необходимо добавить некоторые блестящие функциональные возможности или глазные конфеты JS, всегда выбирайте те, которые специально разработаны и закодированы как можно точнее для ваших конкретных потребностей. Если вы опытный программист, и проект оправдывает ваши усилия, закодируйте его самостоятельно с учетом минимализма.

Просмотрите все плагины, без которых ваш сайт не может жить, и удалите остальные.

И самое главное: сделайте резервную копию своего сайта, прежде чем начинать обрезку!

Модель данных

Если у вас есть тема, в которой вы используете много пользовательских сообщений или полей, имейте в виду, что многие из них замедляют ваши запросы к базе данных. Сохраняйте свою модель данных как можно более простой, а если нет, учтите, что первоначальная цель WordPress заключалась в том, чтобы вести блог. Если вам нужно гораздо больше, вы можете рассмотреть некоторые из веб-фреймворков MVC, которые дадут вам больший контроль над вашей моделью данных и выбором базы данных.

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

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

Мета-запросы могут быть дорогими

Использование пользовательских полей для извлечения сообщений по некоторым критериям может быть отличным инструментом для разработки сложных вещей с WP. Это пример мета-запроса , и здесь вы можете найти некоторые подробности о его стоимости. Резюме: пост-мета не был создан для фильтрации, таксономии были .

get_post_meta— это функция, которая обычно вызывается для выборки пользовательских полей, и ее можно вызывать только с идентификатором записи в качестве аргумента; в этом случае она выбирает все мета-поля записи в массиве или может иметь имя настраиваемого поля в качестве второго аргумент, в этом случае он возвращает только указанное поле.

Если вы используете get_post_meta()это не повлечет за собой дополнительных затрат , поскольку при первом вызове этой функции все мета-сообщения будут кэшированы ,

База данных гигиены

Установка и удаление различных плагинов и изменение различных тем в течение всего срока службы вашего веб-сайта часто загромождают вашу базу данных большим количеством ненужных данных. Совершенно возможно выяснить — после проверки того, почему веб-сайт WordPress работает медленно или почему он даже не загружается из-за нехватки серверной памяти, — объем базы данных вырос до сотен и сотен мегабайт или более гигабайта без содержимого что объясняет его.

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

Если удаление переходных процессов все еще оставляет нас раздутой базой данных без какой-либо существенной причины, WP-Sweep является отличным бесплатным инструментом, который может выполнить работу по очистке базы данных. Еще один вопрос, который стоит рассмотреть, — WP Optimize .

Перед любой очисткой базы данных настоятельно рекомендуется сделать резервную копию базы данных!

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

Вывод плагина Debug Objects

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

Если мы протестируем наш веб-сайт с помощью такого инструмента, как Pingdom Speed ​​Test , мы получим диаграмму водопада всех ресурсов, загруженных в запросе:

Диаграмма водопада Пингдом

Это дает нам подробную информацию о жизненном цикле запрос-ответ, который мы можем проанализировать на наличие узких мест. Например:

  • Если указанное выше время DNS-розетки слишком велико, это может означать, что мы должны рассмотреть возможность кэширования наших записей DNS на более длительный период. Это достигается путем увеличения значения TTL в нашей панели управления доменом / регистратором.
  • Если часть SSL занимает слишком много времени, мы можем рассмотреть возможность включения HTTP / 2, чтобы воспользоваться преимуществами ALPN , настройки заголовков управления кэшем и, наконец, переключения на службу CDN. « Веб-производительность в двух словах: HTTP / 2, CDN и кеширование в браузерах » — это подробная статья на эту тему, а также « Анализ производительности HTTPS » от KeyCDN.
  • Части подключения , отправки и получения обычно зависят от задержек в сети, поэтому их можно улучшить, разместив хостинг рядом с целевой аудиторией, убедившись, что на вашем хосте есть быстрый восходящий канал, и используя CDN. Для этих элементов вы можете также рассмотреть возможность использования инструмента ping (не путать с инструментами Pingdom, упомянутыми выше), чтобы убедиться, что ваш сервер отзывчив.
  • Часть ожидания — желтая часть водопада — это время, которое требуется вашей серверной инфраструктуре для создания или возврата запрошенного веб-сайта. Если эта часть занимает слишком много времени, вы можете вернуться к нашим предыдущим темам оптимизации сервера, установки WordPress и стека базы данных. Или вы можете рассмотреть различные уровни кэширования.

Чтобы получить более подробные советы по улучшению сайта и тестированию, есть небольшая утилита командной строки под названием webcoach . В среде с установленными NodeJS и npm (например, Homestead Improved ) его установка проста:

 npm install webcoach -g

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

команда webcoach

Кэширование

Кэширование может иметь значение при управлении веб-сайтом WordPress. Есть несколько слоев и возможных способов кеширования.

Кэширование страниц

Кэширование страниц — это кэширование всего вывода HTML веб-приложения.

Если мы можем, мы должны сначала попытаться протестировать решения на уровне сервера, такие как кэширование NGINX или Varnish, или системы кэширования, предлагаемые поставщиками управляемых хостов, такими как Kinsta, Siteground и другие.

Оптимизатор сайта

Если это окажется не таким полезным, как нам бы хотелось, мы можем рассмотреть такие плагины, как WP Super Cache , WP Fastest Cache или капитально переработанный W3 Total Cache от GitHub . Все это может улучшить производительность, но обычно требует некоторых экспериментов. Плохо настроенные решения для кэширования могут фактически повредить производительности сайта. Например, W3TC — по крайней мере, до капитального ремонта — может быть лучшим решением для бесплатного кэширования, совершающим настоящие чудеса … когда это работает. Когда это не так, он может отключить ваш сайт.

Известно, что WP Rocket является наиболее высоко оцененным решением для кэширования премиум-класса.

Кэширование страниц может значительно повысить производительность, обслуживая целые веб-сайты из ОЗУ, но имейте в виду, что оно может создать сложности, если у вас динамический веб-сайт с корзиной или детали, которые зависят от файлов cookie или персонализированного внешнего интерфейса. Он может обслуживать части пользовательского интерфейса одного пользователя для другого пользователя, поэтому обычно его необходимо тестировать перед вводом в эксплуатацию. Это особенно относится к решениям на неуправляемых серверах, таких как кэш страниц Varnish или Cloudflare.

Кэширование фрагментов

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

Кеш объекта

Кэширование объектов означает компиляцию и хранение в памяти всех запросов к базе данных и объектов PHP. Некоторые плагины кэширования пытаются управлять объектным кешем для нас. Используемые бэк-энды обычно APCu , Memcached и Redis.
Они должны быть установлены на сервере .

Чтобы углубиться в сравнительный анализ нашего кода PHP и производительности нашего кэширования объектов, ценным инструментом, который требует доступа к оболочке и установленного wp-cli, является команда профиля . Мы можем установить его с:

 wp package install [email protected]:wp-cli/profile-command.git

или

 wp package install wp-cli/profile-command

(Вам может понадобиться добавить флаг --allow-root

Затем мы можем профилировать весь цикл загрузки или перейти к конкретным хукам, файлам и классам, их времени загрузки и коэффициенту кэширования.

Команда профиля wp

Кэширование браузера

Кэширование в браузере означает принуждение браузеров посетителей сохранять статические файлы в своем кэше, поэтому им не нужно получать их с нашего сервера при повторных посещениях. Здесь используются заголовки cache-control и expires . Плагины кэширования часто управляют кэшированием браузера и установкой заголовков. Technumero сделал руководство, которое идет вглубь.

Статические файлы

Статические файлы — это изображения, таблицы стилей, код JS, шрифты, мультимедийные файлы и т. Д. Мы должны убедиться, что мы сжимаем их, и что мы используем HTTP / 2 для обслуживания этих файлов, если это возможно. Если наш управляемый хостинг не поддерживает HTTP / 2 или перевод неуправляемого VPS в HTTP / 2 недоступен, самый простой способ — внедрить CDN в наш стек. CDN обслуживают наши статические файлы из центров обработки данных, ближайших к нашей аудитории. Это уменьшает задержку и обычно означает использование преимуществ их хорошо настроенной инфраструктуры.

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

Что касается мультимедийных файлов, мы должны рассмотреть возможность сжатия / кодирования наших видео, чтобы уменьшить их размер, и предоставления их через таких провайдеров, как YouTube, чтобы снизить нагрузку на наши серверы. Поставщики облачных хранилищ, такие как Amazon S3, являются еще одним хорошим вариантом. Хостинг видео выходит за рамки этой статьи, но WPMUDEV сделал удобное руководство по этой теме.

Что касается изображений, они часто слишком велики для Интернета. Иногда единственное решение, которое позволяет нашему серверу дышать — и может занять много времени — это пакетное сжатие через оболочку. Imagemagick в Linux имеет полезный инструмент convert В этом примере это делается рекурсивно со всеми файлами JPG в папке, снижая качество JPEG до 80%, наряду с другими небольшими улучшениями и изменяя размеры изображений (это должно быть само за себя):

 for file in *.jpg; do convert "${file}" -resize 20% -sharpen 3 -sharpen 2 -brightness-contrast "0x26" -quality 80 thumb."${file}"; done

WP Bullet имеет два превосходных руководства для пакетного сжатия файлов JPG и PNG .

Кроме того, есть сервис Imagify и сопровождающий плагин WordPress для уменьшения размеров изображений, оптимизатор изображений EWWW и другие …

Другие случайные советы

  • Память : убедитесь, что вашей установки достаточно .

  • XML-RPC и страница входа в систему часто страдают от автоматических атак с использованием сценариев перебором, даже если вы не большая рыба. Даже без взлома они могут тратить циклы процессора. Мы должны попытаться остановить их на уровне сервера, прежде чем наша установка WordPress будет загружена. Если нам не нужен доступ к xml-rpc.php

     location = /xmlrpc.php {    
        deny all;    
    }
    

    В Apache:

     <Files xmlrpc.php>
        deny from all
    </Files>
    

    Плагины, такие как iThemes Security , WPS Hide login и другие, могут помочь с этим и с изменением URL-адреса нашей страницы входа.

    Если вы подвергаетесь атакам грубой силы и не защищены CDN, например Cloudflare, или защитой управляемого хоста, рассмотрите брандмауэр, такой как fail2ban (у вас, вероятно, должен быть брандмауэр, независимо от того, атакует он или нет).

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

  • MAX_INPUT_VARS : при сохранении постов с большим количеством мета-полей или переменных продуктов с помощью WooCommerce мы можем достичь предела максимально допустимых переменных запроса (переменных, отправляемых сложными продуктами WooCommerce, могут исчисляться тысячами). Это может сломать ваш сервер. Вот как это исправить .

  • Если ваша установка WordPress с большой базой данных — особенно установка WooCommerce — начинает иметь проблемы со скоростью, которые вы не можете решить иначе, рассмотрите ElasticPress . Некоторым повезло с этим.

  • Если вы используете WordFence, обязательно отключите функцию Live View. Это может остановить даже VPS с парой гигабайт памяти.

  • Если вы регистрируете доступ к своему сайту — особенно в debug.logwp-content Это может вырасти до уровня гигабайт и привести к краху вашего сервера.

  • Если у вас есть сбои системы на вашем сервере / хостинге, дампы памяти заполнят ваше хранилище. Попросите кого-нибудь проанализировать причины этих сбоев, а затем удалите эти файлы. Вы узнаете их по шаблонам, похожим на core.XXXXXX

Все это говорит, повторное предупреждение в порядке: прежде чем вносить какие-либо изменения на свой сайт, сделайте резервную копию!

Вывод

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

Обязательно ознакомьтесь с руководством SitePoint по PWA . Превращение вашего WP-сайта в PWA, насколько это возможно, начиная с дня 0, поможет пользователям установить его на домашние экраны своих устройств, подготовив их к повторным посещениям.