Я создаю продукты 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.
Может ли кто-нибудь дать представление о том, почему операции, которые я выполняю, выполняются так медленно, или, возможно, направить меня к более оптимальным способам их выполнения?
Я создаю продукты WooCommerce на основе данных, которые получаю от API. Мой код в целом работает, но очень медленно. Гораздо медленнее, чем я ожидал. Проверяя мой код на новой установке WordPress, я обнаружил следующее: [list] [*]Создание и сохранение нового объекта продукта занимает около 0,2–0,3 секунды. [/list] [code]$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(); [/code] [list] [*]Создание вариантов продукта может занять еще 0,1–0,3 секунды на каждый вариант.
[code]$variation_id = 0; foreach ($variations as $variation) { if ($variation["pa_some_attr"] === $from_api["pa_some_attr"]) { $variation_id = $variation["id"]; } }
[/code] Я не ожидал, что такие операции займут больше нескольких мс каждая. Я знаю, что постоянное извлечение и вставка в базу данных — это не совсем идеально, но почему это так медленно? Моя база данных является локальной для WordPress, и у PhpMyAdmin нет проблем с запросом к базе данных на скорости менее миллисекунды. Основная проблема, с которой я сталкиваюсь, заключается в том, что PHP истекает время ожидания, пока я пытаюсь чтобы проглотить мои продукты. У меня есть несколько тысяч продуктов, каждый из которых имеет от 1 до 10 вариантов, и последние две недели я изо всех сил старался ускорить этот процесс настолько, чтобы надежно избежать тайм-аута. До сих пор мои основные оптимизации заключались в следующем:
[*]замените вызовы $product->get_product_variations() на пользовательскую функцию, которая получает информацию Мне нужно НАМНОГО быстрее, так как эта функция работает безумно медленно, особенно в цикле.
[*]Уменьшите количество продуктов, которые я принимаю за раз, с помощью пакетной обработки, и уменьшать размеры партий, пока я не перестану видеть Ошибки HTTP_500.
[/list] Может ли кто-нибудь дать представление о том, почему операции, которые я выполняю, выполняются так медленно, или, возможно, направить меня к более оптимальным способам их выполнения?