我有一个关于Zend框架2.我的问题想找出多少时间才能完成一个请求,我知道它应该使用Zend MVCEvent是可能的,但我不知道怎么办。
Answer 1:
在我心中更好的解决办法是更换你这样的模板文件中的特殊变量
{{ renderTime }}
所以你可以自由地控制好文本位置和不要弄乱你的ZF应用JSON响应模型。
让我来解释我为什么不挂钩到\Zend\View\ViewEvent::EVENT_RENDERER
事件,直接替换我的变量Response
在FINISH
事件。
基本上你不能使用其他事件,因为页面是不是在任何时候提供,而且所有的功能/视图助手到您的模板目前尚未完成,因此时间会少那么真实的渲染时间。
该\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