Основные уроки, извлеченные при оптимизации WordPress (для успеха клиентов)

Опубликовано: 2022-09-15
Содержание скрыть
1. Что побудило меня выступить на WordCamp в Мумбаи?
2. Три проблемы, из-за которых я не спал по ночам (с решениями и извлеченными из них уроками)
2.1. Сокращение времени загрузки страницы с 3 минут до миллисекунд…
2.1.1. Проблема
2.1.2. Решение
2.1.3. Улучшение решения
2.2. Как ошибка тайм-аута стала самой продаваемой функцией нашего плагина?
2.2.1. Проблема
2.2.2. Решение
2.2.3. Улучшение решения
2.3. Как среда общего хостинга заставила нас переписать наш плагин?
2.3.1. Проблема
2.3.2. Решение
3. Итоги уроков
4. Какой ваш выбор?

Когда в последний раз у вас был момент облачной девятки?

С отличием сдал школу... или когда твоя девушка/парень принял твое предложение?

Две недели назад у меня было облако девять моментов! Я выступал на WordCamp Mumbai 2017 — крупнейшем WordCamp в Индии.

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

О проблемах, с которыми я столкнулся при работе с большими базами данных WordPress, и о том, как я их решал.

Что побудило меня выступить на WordCamp Mumbai?

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

В StoreApps разработчики не только пишут код, но и поддерживают клиентов. Решение запросов клиентов дало мне один из самых важных уроков.

Так что все это моя повседневная рутина, и это довольно интересно.

Но знаете, что для меня более захватывающее? Работа с большими базами данных и решение сложных проблем с базами данных!

Нашими плагинами пользуются более 35000 пользователей. И я видел много проблем при работе с крупными магазинами WooCommerce и популярными сайтами WordPress.

К счастью, я смог решить эти проблемы и многому научился.

Но подождите, как и я, сотни других разработчиков столкнутся с аналогичными проблемами при работе с WordPress и WooCommerce.

Поэтому я решил поделиться своими уроками с другими.

А что может быть лучше, чем возможность выступить на крупнейшем в Индии WordCamp!

Три проблемы, из-за которых я не спал по ночам (с решениями и извлеченными из них уроками)

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

Сокращение времени загрузки страницы с 3 минут до миллисекунд…

Проблема

Я столкнулся с ситуацией с плагином Smart Coupons, когда простой функционал отображения купонов на важных страницах магазина (т.е. корзина, страница оформления заказа и страницы моей учетной записи) останавливал процесс оформления заказа.

Smart Coupons — это плагин для массового создания и обработки купонов и подарочных сертификатов для магазина WooCommerce.

Решение

Теперь использование WP Query привело бы к нескольким JOIN , поскольку для отображения доступных купонов для конкретного пользователя требуется оценка нескольких метаусловий.

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

Оптимизация WordPress
Смарт-купоны Старый код

Кроме того, в пользовательских запросах я сделал следующее:

  • Вместо того, чтобы проверять все метаусловия в одном запросе MySQL, я просто вычислил первое метаусловие .
  • После этого я сохранил разделенный запятыми список post_ids (идентификаторов купонов) в таблице параметров.
  • А затем я просто уменьшил карту того же набора post_id, оценив каждое из других мета-условий.

Я делал это до тех пор, пока не получил окончательный набор post_id, которые нужно было отобразить для конкретного пользователя.

Оптимизация WordPress
Смарт-купоны Новый код

Улучшение решения

Это решило проблемы с загрузкой страницы. Однако, чтобы получить загрузку страницы менее чем за миллисекунды, как предложил наш друг, мне пришлось переопределить проблему.

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

Как ошибка тайм-аута стала самой продаваемой функцией нашего плагина?

Проблема

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

Пример: если кому-то нужно было снизить цены на все товары в своем магазине на 40%, то ему просто нужно выбрать «Цена», «уменьшить на 40%» и нажать кнопку «Обновить». Это легко возможно с помощью нашего плагина Smart Manager, разработанного для упрощения массовых обновлений в ваших магазинах WooCommerce.

Но процесс пакетного обновления начал останавливаться и выдавать ошибки тайм-аута всякий раз, когда кто-либо пытался обновить 1000 продуктов или весь магазин за раз .

Сначала я начал искать оптимизацию запросов, но это не помогло.

Моя ситуация была похожа на участницу Takeshi's Castle. Как бы я ни старался, я продолжал падать в воду.

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

Решение

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

Я сделал то же самое и понял, что на самом деле проблема была
не на уровне запроса, а на уровне запроса .

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

Оптимизация WordPress
Ajax-запросы пакетного обновления Smart Manager

Улучшение решения

Теперь этот подход разбиения одного запроса на несколько меньших запросов AJAX не только решил ошибку тайм-аута, но и улучшил UX пакетного обновления .

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

Кроме того, тот же подход позволил Smart Manager обрабатывать пакетные обновления для магазина WooCommerce любой формы и размера и сделал Smart Manager одним из самых продаваемых плагинов StoreApps.

Как среда общего хостинга заставила нас переписать наш плагин?

Проблема

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

Оптимизация WordPress
Сообщения WordPress Postmeta ERD

Как уже было видно выше, JOIN такие дорогие .

В Smart Reporter (наше решение для создания отчетов для WooCommerce) мы показывали 20 различных статистических данных отчетов при просмотре одной страницы, а также при загрузке страницы.

Решение

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

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

Оптимизация WordPress
Сводная таблица Smart Reporter

Кроме того, для обновления этих сводных таблиц мы использовали действия и фильтры WordPress.

Резюме уроков

  • Следуйте лучшим практикам как можно больше
  • Нет запросов в цикле
  • Избегайте больших сложных соединений
  • Делайте больше на уровне MySQL, чем на уровне PHP
  • Углубитесь в код
  • Сводка/Пользовательские/Временные таблицы
  • Внимание к UX — отзывчивость, уведомления…
  • Вы решаете правильную проблему?

Какой твой выбор?

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