Существует сайт, на котором представлены товары из тысяч интернет-магазинов. Они получают товары всех этих интернет-магазинов через файл XML.
Я создал файл XML, в котором содержатся все мои продукты 2k +.
Для меня чтобы создать этот список продуктов XML, я сделал БОЛЬШОЙ запрос, в котором перечислен каждый отдельный продукт с его переменными и каждый вариант, который имеет переменная.
Весь запрос занимает около 30-40 секунд до окончания sh и сгенерировать мой XML файл.
Но иногда, когда сервер достаточно загружен, процесс завершается сбоем, поскольку в загруженное время память слишком велика. Я увеличил лимит памяти до 132 МБ, а max_execution_time - до 60 секунд. Но я все еще получаю случайные сбои при создании файла XML время от времени.
Что мне нужно сделать, чтобы сделать запрос быстрее? Я много читал о Transient API. Вы думаете, что это хорошая идея? Сторонний веб-сайт, которому я отправляю файл XML, запрашивает его каждые 1 час. Поэтому я выполнил задание cron для моего сервера по воссозданию XML каждые 1 час, чтобы в файле всегда были новые продукты или любое изменяемое значение.
Моя главная проблема - как мне сделать Запрашивает все варианты / переменные быстрее?
Вот как я строю XML на тот случай, если вы, ребята, считаете, что процесс неэффективен:
// Create the XML file
$myFile = fopen("skroutz.xml", "w+");
// XML Headers
$ex .= "<?xml version='1.0' encoding='UTF-8'?>";
$ex .= "<mywebstore>";
$ex .= "<created_at>" . date("Y-m-d H:i") . "</created_at>";
$ex .= "<products>";
// Loop through products
$loop = new WP_Query( array(
'post_type' => 'product',
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC',
'tax_query' => array( array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => 113,
'operator' => 'NOT IN'
) )
) );
if ( $loop->have_posts() ) : while ( $loop->have_posts() ) : $loop->the_post();
if ( $product->is_type( 'variable' ) ){ // Check if product is Variable
...
}
endwhile;
endif;
wp_reset_query();
$ex .= "</products>";
$ex .= '</mywebstore>';
fwrite($myFile, $ex);
fclose($myFile);