• Resolved JayFry

    (@jayfry)


    Добрый день!

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

    В данный момент ваш плагин хранит данные о продукте в индивидуальном мета поле таблицы wp_postmeta. При этом плагин хранит даже дефолтные и пустые значения мета полей! На один продукт приходится 29 (!) полей.

    В нашем магазине сейчас порядка 6000 товаров. И общий размер таблицы wp_metadata – 295000 записей (без вашего плагина). При установке вышего плагина он добавляет дополнительно 6000 * 29 = 174000 записи в эту таблицу.

    При этом на сайтах с Woocommerce таблица wp_metadata самая большая и загруженная. Т.к. в ней хранятся все данные о товарах. А ваш плагин один увеличивает её размер на 60%. Это просто гигантское значение, которое существенно замедляет скорость работы сайта и отзывчивость базы данных. При этом все данные которые использует плагин не нужны “на лету”, а обрабатываются на фоне.

    В связи с этим у меня несколько предложений.

    1. Не хранить данные в wp_postmeta
    2. Хранить данные в wp_postmeta но объеденить их в одно мета поле, можно хранить значение всех полей как единый архив.

    Зачем вообще хранить пустые или дефолтные значения? В них же нет никакого смысла. Эти записи только забивают базу. Даже если пользователь не изменил ни одного значения на странице продукта, ваш плагин все равно сохраняет все 29 метаполей на продукт в базу. Их же можно подставлять на лету из какого-нибудь списка дефолтных значений, если get_post_meta == “” .

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

    Я считаю что вам нужно пересмотреть свой подход к хранению полей в БД. Плагин создающий фид продуктов фоне, не должен вообще влиять на производительность сайта.

    • This topic was modified 8 months ago by JayFry.
    • This topic was modified 8 months ago by JayFry.
    • This topic was modified 8 months ago by JayFry.
    • This topic was modified 8 months ago by JayFry.
Viewing 2 replies - 1 through 2 (of 2 total)
  • Plugin Author icopydoc

    (@icopydoc)

    Добрый день. Спасибо большое за обратную связь. По данному вопросу не могу рассказать всего публично на форуме. Ограничусь лишь частью информации. Объединение в одно метаполе частично существует в плагине (в карточке товаров не 29 полей, а гораздо больше, часть полей это массивы). Но практика показала, что serialize не самый лучший путь.
    В настоящий момент “основной вариант” это, как раз “не создавать пустые поля”. Этот механизм пока тестируется на другом моём плагине со схожей схемой работы.
    Но есть ряд сложностей. Основные из них – это обратная совместимость, а также совместимость со сторонними плагинами, такими как WP All Import и не только. Плюс очень многим удобнее работать с метаполями для решения ряда своих задачек.
    Вот у нас тн вэд код, например, не в метаполе. Но вы не поверите СКОЛЬКО писем я получая с просьбами “засуньте его в метаполе немедленно”. Также хочу отметить, что 6000 товаров, на самом то деле не много и вероятно просадки производительности связаны не только с моим плагином. Я знаю что мой плагин используют магазины с парой-тройкой сотен тысяч товаров и при этом проблем замедления (заметных пользователю) у них нет. Хотя дисковое пространство, разумеется, это съедает.
    Но повторюсь, что улучшение ситуации в этом направлении действительно обсуждается и работы (пусть пока и незаметные пользователю), ведутся. Каждый апдейт что-то да исправляет либо “готовит почву” для исправления.

    Ещё раз спасибо за обратную связь и варианты решения.

    Thread Starter JayFry

    (@jayfry)

    Спасибо за обратную связь!

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Оптимизация плагина’ is closed to new replies.