07/04/2018 - SYMFONY
Kullanıcı uygulamaya istek gönderir ve uygulamada cevap verir. Bu bildiğimiz sistem akışıdır ama bu işlem toplam olarak ne kadar sürer? Eğer bunu öğrenmek isterseniz aşağıdaki örneği kullanabilirsiniz.
declare(strict_types=1);
namespace AppBundle\Controller;
interface AuditControllerInterface
{
}
declare(strict_types=1);
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Symfony\Component\HttpFoundation\Response;
class DefaultController implements AuditControllerInterface
{
/**
* @Method({"GET"})
* @Route("")
*/
public function indexAction(): Response
{
sleep(2);
$template = $this->templating->render('AppBundle:default:index.html.twig', []);
return (new Response())->setContent($template);
}
}
declare(strict_types=1);
namespace AppBundle\Event\Listener;
use AppBundle\Controller\AuditControllerInterface;
use Symfony\Component\HttpKernel\Controller\ControllerResolver;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
class KernelResponseListener
{
private $controllerResolver;
public function __construct(ControllerResolver $controllerResolver)
{
$this->controllerResolver = $controllerResolver;
}
public function onKernelResponse(FilterResponseEvent $event)
{
if ($event->isMasterRequest()) {
$request = $event->getRequest();
$controllers = $this->controllerResolver->getController($request);
if ($controllers[0] instanceof AuditControllerInterface) {
$this->audit($request->server->get('REQUEST_TIME_FLOAT'), microtime(true));
}
}
}
private function audit(float $reqTime, float $resTime): void
{
$reqMilliSecond = (int) ($reqTime * 1000);
$resMilliSecond = (int) ($resTime * 1000);
$reqMicroSecond = (int) ($reqTime * 1000000);
$resMicroSecond = (int) ($resTime * 1000000);
$audit = [
'milliseconds' => [
'req' => $reqMilliSecond,
'res' => $resMilliSecond,
'elapsed' => $resMilliSecond - $reqMilliSecond,
],
'microseconds' => [
'req' => $reqMicroSecond,
'res' => $resMicroSecond,
'elapsed' => $resMicroSecond - $reqMicroSecond,
]
];
print_r($audit);
}
}
services:
AppBundle\Event\Listener\KernelResponseListener:
arguments:
- '@debug.controller_resolver.inner'
tags:
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
Eğer http://symfony.dev/app_dev.php/
adresine giderseniz, aşağıdakine benzer bir sonuç göreceksiniz. Sayfanın altındaki Symfony profiler barındaki süre "millisecond" olarak belirlenmiştir yani sizin milliseconds->elapsed
(2565) sürenize çok yakın olduğunu göreceksiniz.
Array
(
[milliseconds] => Array
(
[req] => 1523099189672
[res] => 1523099192237
[elapsed] => 2565
)
[microseconds] => Array
(
[req] => 1523099189672000
[res] => 1523099192237378
[elapsed] => 2565378
)
)