Формування xml прайсу на php завантажує проц на 100%. Чи можна оптимізувати?
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.
<?php echo '<?yml version="1.0" encoding="UTF-8"?>'; ?>
<?php
$i = 0;
?>
<yml_catalog>
<shop>
<offers>
@foreach ($products as $item)
<?php
$i++;
if ($i % 250 == 0) {
usleep(250000);
}
?>
<offerid="{{$item->product_id}}">
<currencyId>UAH</currencyId>
<article>{{$item->article}}</article>
<barcode>{{$item->barcode}}</barcode>
<vendorBarcode />
<vendorCode />
<categoryId>{{$item->category_id}}</categoryId>
<price>{{$item->price}}</price>
<vendorCode>{{$item->product_id}}</vendorCode>
<vendor>{{$item->brand}}</vendor>
<stock_quantity>{!! \App\Helpers\AppHelper::instance()->myAmount($item->product_id) !!}</stock_quantity>
@if ($lang == 'ua')
<name>{{$item->name_ua}}</name>
<description>
<![CDATA[{{$item->description_ua}}]]>
</description>
{!!$item->param_ua!!}
@else
<name>{{$item->name_ru}}</name>
<description>
<![CDATA[{{$item->description_ru}}]]>
</description>
{!!$item->param_ru!!}
@endif
{!!$item->pictures!!}
</offer>
@endforeach
</offers>
</shop>
</yml_catalog>
Потрібно генерувати xml прайси «на льоту» (потрібно динамічно відображати в ньому залишки товарів, для різих клієнтів з різних складів).
Генерація прайсу на 7000 позицій (2,4 Мб) займає до 15 секунд
Але проблема в тому, що при цьому процесор завантажується на 60%, а коли всі клієнти запускають свої cron-завдання по завантаженню собі прайсів, то все вмирає.
Можливо щось можна оптимізувати? Чи потрібно змінювати бізнес процес?
Параметри FPM
pm = dynamic
pm.max_children = 80
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 150
Параметри серверу
Xeon E5-2630 2.3GHz, 2 Physical core, 2 Logical core
15 Gb RAM
39 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів