Почему программное создание продукта WooCommerce происходит так медленно?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Почему программное создание продукта WooCommerce происходит так медленно?

Сообщение Anonymous »

Я создаю продукты WooCommerce на основе данных, которые получаю от API. Мой код в целом работает, но очень медленно. Гораздо медленнее, чем я ожидал. Проверяя мой код на новой установке WordPress, я обнаружил следующее:
  • Создание и сохранение нового объекта продукта занимает около 0,2–0,3 секунды.

Код: Выделить всё

$product_id = wc_get_product_id_by_sku("1234"); // 0 if no product found
$product = new WC_Product_Variable($product_id);
$product->set_name("some product");
$product->set_reviews_allowed(false);
$product->set_sku("1234");
$product->save();
  • Создание вариантов продукта может занять еще 0,1–0,3 секунды на каждый вариант.

    Код: Выделить всё

    $variation_id = 0;
    foreach ($variations as $variation) {
    if ($variation["pa_some_attr"] === $from_api["pa_some_attr"]) {
    $variation_id = $variation["id"];
    }
    }
    
    $variation = new WC_Product_Variation($variation_id);
    $variation->set_attributes(["pa_some_attr" => "variant_selector_a"]);
    $variation->set_parent_id($product->get_id());
    $variation->set_regular_price(123.45);
    $variation->set_reviews_allowed(false);
    $variation->set_virtual(true);
    $variation->save();
    
    
    Я не ожидал, что такие операции займут больше нескольких мс каждая. Я знаю, что постоянное извлечение и вставка в базу данных — это не совсем идеально, но почему это так медленно? Моя база данных является локальной для WordPress, и у PhpMyAdmin нет проблем с запросом к базе данных на скорости менее миллисекунды.
    Основная проблема, с которой я сталкиваюсь, заключается в том, что PHP истекает время ожидания, пока я пытаюсь чтобы проглотить мои продукты. У меня есть несколько тысяч продуктов, каждый из которых имеет от 1 до 10 вариантов, и последние две недели я изо всех сил старался ускорить этот процесс настолько, чтобы надежно избежать тайм-аута. До сих пор мои основные оптимизации заключались в следующем:
  • замените вызовы $product->get_product_variations() на пользовательскую функцию, которая получает информацию Мне нужно НАМНОГО быстрее, так как эта функция работает безумно медленно, особенно в цикле.
  • Уменьшите количество продуктов, которые я принимаю за раз, с помощью пакетной обработки, и уменьшать размеры партий, пока я не перестану видеть Ошибки HTTP_500.
Может ли кто-нибудь дать представление о том, почему операции, которые я выполняю, выполняются так медленно, или, возможно, направить меня к более оптимальным способам их выполнения?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ct-so-slow
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»