在Zend中2请求之间的时间(Time between request in Zend 2)

2019-10-20 17:25发布

我有一个关于Zend框架2.我的问题想找出多少时间才能完成一个请求,我知道它应该使用Zend MVCEvent是可能的,但我不知道怎么办。

Answer 1:

在我心中更好的解决办法是更换你这样的模板文件中的特殊变量

{{ renderTime }}

所以你可以自由地控制好文本位置和不要弄乱你的ZF应用JSON响应模型。

让我来解释我为什么不挂钩到\Zend\View\ViewEvent::EVENT_RENDERER事件,直接替换我的变量ResponseFINISH事件。

基本上你不能使用其他事件,因为页面是不是在任何时候提供,而且所有的功能/视图助手到您的模板目前尚未完成,因此时间会少那么真实的渲染时间。

\Zend\View\ViewEvent::EVENT_RENDERER_POST因为事件是不好的-你的观点被渲染这就是真实的-但应用程序不这样做,梅比随后所有的注册事件等尚未执行。

如果你喜欢我的想法比你index.php应该是这样的

<?php
/**
 * This makes our life easier when dealing with paths. Everything is relative
 * to the application root now.
 */
chdir(dirname(__DIR__));
define('STARTTIME', microtime(true));

// Decline static file requests back to the PHP built-in webserver
if (php_sapi_name() === 'cli-server' && is_file(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH))) {
    return false;
}

// Setup autoloading
require 'init_autoloader.php';

// Run the application!
Zend\Mvc\Application::init(require 'config/application.config.php')->run();

和你的module.php onBootstrap方法将成为这个

$e->getApplication()->getEventManager()->attach(\Zend\Mvc\MvcEvent::EVENT_FINISH, function($e){
    /** @var $e \Zend\Mvc\MvcEvent */
    if( $e->getResult() instanceof \Zend\View\Model\ViewModel )
    {
        $renderText = sprintf('page render time - %s seconds', number_format(microtime(true) - STARTTIME, 5));

        /** @var \Zend\Http\PhpEnvironment\Response $response */
        $response = $e->getResponse();
        $response->setContent(
            str_replace('{{ renderTime }}', $renderText, $response->getContent())
        );
    }
}, 100000);

在你的模板/布局文件设置您希望与注入的渲染{{ renderTime }}

<h1>Hello Friends!</h1>
<div>some content</div>
<div class="footer">
    {{ renderTime }}
</div>

现在让你page render time - 0.67307 seconds



Answer 2:

这并不完全回答你的问题,但我认为你可以用做这样的事REQUEST_TIME ,你可以从请求服务器获取。 事情是这样的:

 $startTime = $mvcEvent->getRequest()->getServer()->get('REQUEST_TIME');

然后在请求结束:

 $endTime = microtime(true);

我不知道,但我认为这个模块ZendDeveloperTools许可证显示执行时间。



Answer 3:

这是我用的代码是在Module.php写上,我想在每一页上显示的请求时,由模块想出了解决方案:

 public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $checklistener=new CheckListener();
    $checklistener->attach($eventManager);
    $addyearlistener=new AddyearListener();
    $addyearlistener->attach($eventManager);
    $moduleRouteListener->attach($eventManager);
    //request time
    $eventManager->attach(MvcEvent::EVENT_DISPATCH,function($e){
        $param=new Parameters(array('time' => microtime(TRUE)));
        $e->getApplication()->getRequest()->setPost($param);
        $e->getApplication()->getEventManager()->attach(MvcEvent::EVENT_FINISH, function($e){
           echo 'Time:'. (microtime(TRUE)-$e->getRequest()->getPost('time')).' seconds'; 
        });

    });

}


文章来源: Time between request in Zend 2