Оптимизация WooCommerce путём переноса товаров в отдельную таблицу
Одним из самых узких мест в WooCommerce по производительности является хранение товаров и заказов в стандартной таблице записей WordPress.
Благодаря тому, что WooCommerce с версии 3.0 добавили встроенный функционал Data Stores и CRUD, появилась простая возможность переносить хранилище данных в произвольные таблицы.
Плагин WooCommerce Custom Product Tables позволяет в один клик перенести хранилище товаров, атрибутов, изображений, их связей и настроек в произвольные таблицы с правильной структурой и индексами.
Производительность
Перенос товаров в произвольные таблицы по результатам тестирования даёт 30% прирост производительности.
Замеры производились на идентичных инсталляциях (500 товаров, тема Storefront, 70000 заказов и 1.4 млн строк метаданных), но с одним отличием: на второй инсталляции был установлен плагин WooCommerce Custom Product Tables.
Для простого создания огромного количества товаров и заказов был использован плагин WooCommerce Smooth Generator.
Результаты замеров приведены на графике ниже и они потрясающе.
Установка плагина
Для установки плагина вам потребуется:
- Скачать последнюю версию плагина Custom Products Table.
- Скачать и установить WooCommerce 3.5 Dev или выше.
- Скачать и установить WP-CLI для запуска процесса миграции товаров в новое хранилище.
Так как плагин пока находится на стадии разработки, не рекомендуется его устанавливать на продуктовых серверах.
Миграция
Для запуска процесса миграции данных в плагине предусмотрено две WP-CLI команды.
wp wc-product-tables migrate-data [--clean-old-data]
Эта команда перенесёт данные из текущих таблиц WordPress в новое хранилище.
Если передать дополнительный параметр --clean-old-data
, то все данные по товарам, которые хранятся в стандартных таблицах WordPress, будут уничтожены безвозвратно.
wp wc-product-tables recreate-tables
Эта команда удалит все свежесозданные таблицы и данные о товарах в них, а затем создаст новые чистые таблицы.
Любые новые товары, созданные после активации плагина, будут созданы в новых таблицах и не будут доступны при деактивации плагина.
Таблицы
После установки и активации плагина будут созданы несколько новых таблиц в базе данных для хранения информации о товарах.
- wc_products – содержит информацию о товарах, исключая большую часть метаданных.
- wc_product_attributes – содержит информацию об атрибутах товаров и их настройки.
- wc_product_attribute_values – содержит информацию о значениях атрибутов товаров и их настройки.
- wc_product_downloads – содержит информацию о скачиваемых товарах и их настройки.
- wc_product_relationships – содержит информацию о связях между товаров и их объектов, например, изображений.
- wc_product_variation_attribute_values – содержит информацию о данных вариаций для товаров.
В настоящее время эти таблицы охватывают все аспекты товаров, в том числе настройки товаров, атрибуты, вариации, скачиваемые товары, а также другие взаимосвязи, такие как апселлы, кросселлы, сгруппированные товары и изображения.
Планируете ли Вы объединять этот плагин с WooCommerce Custom Orders Table или даже создавать отдельный WooCommerce Bundle?
Смысла объединять нет, так как оба плагина в этом году должны быть интегрированы в ядро WooCommerce.
В ядро WooCommerce или WordPress 5.4?
Само собой WooCommerce.
А случайно не знаете, пострадают ли от этого те, кто уже использовал плагин WooCommerce Custom Orders Table? Да и вообще, будут ли предусмотрены какие-то механизмы миграции? Вообще, идея оптимизировать таблицы в БД мне нравится.
Скорее всего нет, так как это официальный плагин от самих WooCommerce.
В любом случае можно сделать откат к старому формату базы и потом обновить WooCommerce.
Следите за новостями в нашем @wordpress_digest.
Приветствую. Подскажите, пожалуйста, где можно подробнее ознакомиться на счет подобной интеграции? Статья, срок, версия.
Следить можно в официальном блоге для разработчиков WooCommerce.
Добрый день, верно понимаю, что так ничем и не закончилась эта история и отдельно товары не выносятся из стандартной таблицы?
Всмысле не закончилось? Берите плагин из статьи — пользуйте.
у нас обмен на сайте используется с мой склад, а не сломается ли эта логика в обмене из-за того, что не стандартные таблицы будут использоваться?
Тут зависит от вашего плагина интеграции с Мой Склад, если он использует API WooCommerce, то проблем быть не должно. Если там прямые запросы в базу или какой-нибудь update_field/get_post_meta, то это печаль и такой плагин нужно выкинуть.
и не будет ли ваш плагин конфликтовать с HPOS
Плагин не мой, от разработчиков Woo, он использует HPOS, просто ранее он по-другому назывался.
Подскажите есть ли какая то возможность например вынести эти таблицы вообще в отдельную БД от сайта.. и потом с нескольких сайтов использовать централизованную БД с товарами.. т.е в одном месте обновил везде обновилось. Единая БД с товарами для нескольких сайтов. Или где то можно прописать это в плагине что бы сделать эти таблички на отдельном сервере и с отдельного сервера получать. Спасибо вам большое!
При определёной сноровке можно, используя хуки самого woo
Будет ли все корректно работать с WP ALL IMPORT? Если товары импортируются от поставщика через файл по крону?
Да, конечно