Пакетный Symfony запрашивает время выполнения ядра

Я пытаюсь выполнить массовые операции с помощью инструмента командной строки и http_kernel составная часть.

Я сохранил запросы в базе данных и, используя команду, пытаюсь использовать свои контроллеры внутренне, вызывая $kernel->handle($request); за каждый запрос.

Проблема в том, что время выполнения каждого запроса увеличивается со временем.

Эта команда была выполнена в тестовой среде, и я уверен, что выполнение будет намного быстрее на производственном сервере.

Изменить: у меня есть около 10.000 запросов, которые будут выполнены, и все эти запросы очень похожи

Тем не менее, я хотел бы знать, если есть оптимизация, которая может быть сделана для обеспечения стабильное время выполнения для всей партии.

Вот мой код:

$kernel = $this->getContainer()->get('http_kernel');

foreach ($requests as $request) {

$start = round(microtime(true) * 1000);

$response = $kernel->handle($request);
$kernel->terminate($request, $response);

$requestDuration = (round(microtime(true) * 1000) - $start);

$output->writeln(($response->isSuccessful() ? ' . ' : ' X ') . '(' . $handleDuration . ')');
}

Вот пример вывода: (. означает успешный запрос; время (мс) в скобках)

. (246 ms)
. (275 ms)
. (271 ms)
. (268 ms)
. (564 ms)
. (379 ms)
. (353 ms)
. (321 ms)
[...]
. (416 ms)
. (425 ms)
. (409 ms)
. (448 ms)
. (402 ms)
. (405 ms)
. (410 ms)
. (453 ms)
. (476 ms)
. (462 ms)
. (488 ms)
[...]
. (564 ms)
. (537 ms)
. (553 ms)
. (564 ms)
. (510 ms)
. (564 ms)
. (531 ms)
. (569 ms)
. (655 ms)
[...]
. (1155 ms)
. (1179 ms)
. (1142 ms)
. (1126 ms)

Спасибо за помощь !

(Редактировать)

Вот некоторые подробности о действиях, выполняемых контроллером:

public function postEntityAction(Request $request) {
// get the authenticated user
$authUser = $this->getUser();
// fetch some data from the database (there is about 6 calls like this one that could be done during the process)
// note: the hydrator used by all my repository methods is SIMPLEOBJECT
$item = $itemRepository->getItemById($request->request->get('itemId'));
// create an entity and set its fields
$entity = new Entity();
$entity->setItem($item);
// I also do some validations using the validator service
$validator = $this->get('validator');
$validator->validate($entity);
// I persist the new entity
$this->getDoctrine()->getManager()->persist($entity);
$this->getDoctrine()->getManager()->flush();
// and finally I return the serialized object (using JMS serializer)
return $this->serialize($entity);
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector