Zend framework2 Zend 2中请求之间的时间间隔2

Zend framework2 Zend 2中请求之间的时间间隔2,zend-framework2,request,Zend Framework2,Request,我有一个关于Zend Framework 2的问题。我想知道完成一个请求需要多少时间,我知道使用Zend MVCEvent应该是可行的,但我不知道怎么做。这并不能完全回答您的问题,但我想您可以使用从请求服务器获得的请求时间来完成这项工作。大概是这样的: $startTime = $mvcEvent->getRequest()->getServer()->get('REQUEST_TIME'); 然后在请求结束时: $endTime = microtime(true);

我有一个关于Zend Framework 2的问题。我想知道完成一个请求需要多少时间,我知道使用Zend MVCEvent应该是可行的,但我不知道怎么做。

这并不能完全回答您的问题,但我想您可以使用从请求服务器获得的
请求时间
来完成这项工作。大概是这样的:

 $startTime = $mvcEvent->getRequest()->getServer()->get('REQUEST_TIME');
然后在请求结束时:

 $endTime = microtime(true);

我不确定,但我认为该模块允许显示执行时间。

这是我提出的解决方案,代码是在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'; 
        });

    });

}

在我看来,一个更好的解决方案是像这样替换模板文件中的一个特殊变量

<?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();
{{renderTime}}

<h1>Hello Friends!</h1>
<div>some content</div>
<div class="footer">
    {{ renderTime }}
</div>
因此,您可以自由地控制文本位置,并且不会弄乱zf应用程序中的json响应模型

让我解释一下为什么我不连接到
\Zend\View\ViewEvent::EVENT\u RENDERER
事件中,并在
完成
事件的
响应中直接替换变量

基本上,您不能使用其他事件,因为页面在任何时候都不会呈现,并且模板中的所有函数/viewhelper当前都没有完成,因此时间将少于实际呈现时间

\Zend\View\ViewEvent::EVENT\u RENDERER\u POST
事件不好,因为-您的视图呈现为true-但应用程序尚未完成,并且可能尚未执行随后的所有注册事件等

如果你喜欢我的想法,你的
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();
在模板/布局文件集中,您希望在其中使用
{{rendertime}}

<h1>Hello Friends!</h1>
<div>some content</div>
<div class="footer">
    {{ renderTime }}
</div>
朋友们好!
一些内容
{{renderTime}

这给了你
页面渲染时间-0.67307秒

谢谢你的回答,这并不是我真正想要的,我也首先带了这个aproch:$eventManager->attach(MvcEvent::EVENT_FINISH,function($e){$p=$e->getParams();echo'Time:'(microtime(TRUE)-$p['request']>getServer('request_Time'))。'seconds';});但这还不够好,因为我不想依赖apache服务器,我需要一些可以在任何服务器上工作的东西。现在我尝试在MvcEvent::EVENT_DISPATCH和MvcEvent::EVENT_FINISH and make different中实现微时间(true),但是我不知道如何从我附加的EVENT_DISPATCH callback接收microtime值。@SerbanAlexandru您可以向事件实例添加任意值<代码>$mvcEvent->setParam('startTime',$value)
$mvcEvent->getParam('startTime')
在以后的侦听器中。我知道,但是mvcEvent::Event_调度需要mvcEvent实例,而不是mvcEvent\Event实例,如果我理解你的意思。Aniway我找到了另一种方法,最后我会给出一个答案。你说,如果我在DISPATCH事件中初始化开始时间,在finish事件中初始化完成时间,那么不是所有的请求都可能完成?我看到你在FINIS事件中初始化完成时间,但在bootstrap中直接初始化开始时间方法,所以你是说,因为我的开始时间在DISPATCH方法中,而你的开始时间在bootstrap direct中,所以我失去了一些请求时间?我这样做是因为我从Zend文档中了解到,请求以trigger DISPATCH事件开始,并在trigger Finish事件结束时结束。那么,你能确切地解释一下你的方法中的请求流是什么吗愿景?谢谢!即使在
onBootstrap
方法中设置starttime时,您也会错过zend引导应用程序/路由等所需的一些时间。您的答案是可以的,但不是很好,因为您劫持了
请求
类以交付渲染时间,并且无法控制渲染时间在客户端的显示位置(在底部-无控制)你也会搞乱json视图模型,因为每次你的响应都会附加到直接的客户端输出中。我编辑我的回答我理解你在页面中关于位置的说法,但我没有考虑到这一点,我的第一个目标是使用MVC事件以某种方式确定请求时间,然后我可以做一些技巧,将时间放在想要像您对setContent所做的那样,可能还有其他可能性,但我还没有考虑它们,我只是想看看请求是如何从MVC事件端流出来的,以及如何使用Event->attach在应用程序的某个时刻做一些事情,比如在请求启动之前和完成之后,这就是应用程序的目的习惯requestFlow和MVC事件,因为我几天前才开始学习Zend 2,我想更好地了解事情的发展。我添加了你的解决方案,你是对的,时间差,我的是0.014517068862915秒,你的是0.07570秒。但是如果你能告诉我一些时间差,我会非常感激关于Zend按要求做事的具体顺序是什么,这样我就可以看到我浪费了多少时间。谢谢!