Почему создание Symfony Response занимает так много времени, использует столько памяти, и что я могу с этим поделать?

Тестовый скрипт:

#!/usr/bin/php
<?php
require __DIR__.'/../www/autoload.php';

$start = microtime(true);
$mem = memory_get_usage(true);
$resp = new \Symfony\Component\HttpFoundation\Response();
$elapsed = (microtime(true)-$start)*1000;
$used_mem = memory_get_usage(true)-$mem;
echo number_format($elapsed,2)." ms\n";
echo number_format($used_mem/1024,1)." KiB\n";

Выход:

2.25 ms
256.0 KiB

Самое смешное, что если я поставлю это в цикле, стоимость не сильно возрастет:

$resp = [];
for($i=0; $i<100; ++$i) {
$resp[] = new \Symfony\Component\HttpFoundation\Response();
}

6.73 ms
512.0 KiB

Но мне нужен только один ответ, так что это не имеет особого значения.

Смотря на конструктор за ResponseЕдва ничего не делает. Он просто инициализирует несколько переменных.

2 мс — это значительная часть моего времени отклика, я бы очень хотел уменьшить это, если это возможно.

4

Решение

Если у вас есть проблемы такого рода, вы обычно должны профилировать их с помощью XDebug: http://www.xdebug.org/docs/profiler

Он точно скажет вам, в чем заключается «проблема», показывая, сколько времени было потрачено на каждый метод и сколько раз он был вызван.

В этом случае «проблема» Линия 206, построение объекта \ DateTime, а затем объекта \ DateTimeZone.

Чтобы исключить все другие факторы, убедитесь, что вначале не происходит автозагрузка, поэтому измените тест на:

<?php

require 'vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Response.php';
require 'vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/HeaderBag.php';
require 'vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/ResponseHeaderBag.php';

$start = microtime(true);
$mem = memory_get_usage(true);
$resp = new \Symfony\Component\HttpFoundation\Response();
$elapsed = (microtime(true)-$start)*1000;
$used_mem = memory_get_usage(true)-$mem;
echo number_format($elapsed,2)." ms\n";
echo number_format($used_mem/1024,1)." KiB\n";

Тест с линией 206 на моей машине

3.57 ms
0.0 KiB

Тест с Line 206 закомментирован на моей машине

0.32 ms
0.0 KiB
5

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

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

По вопросам рекламы [email protected]