在Laravel中获取服务器响应时间的正确方法

Joh*_*pit 7 php laravel laravel-5

我创建了一个可终止的中间件,可以向Google Analytics发送请求.我发送的一个属性是服务器响应时间.我是这样做的:

\App\Http\Kernel我添加SendAnalytics中间件:

class Kernel extends HttpKernel {
    ...
    protected $middleware = [
        'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
        ...
        'App\Http\Middleware\SendAnalytics',
    ];
}
Run Code Online (Sandbox Code Playgroud)

SendAnalytics中间件是这样的:

class SendAnalytics implements TerminableMiddleware {

    protected $startTime;

    public function __construct() {
        $this->startTime = microtime(true);
    }

    public function handle($request, Closure $next) {
        return $next($request);
    }

    public function terminate($request, $response) {
        $responseTime = microtime(true) - $this->startTime;
        /* I send a request to Google here, using their Measurement Protocol */
        // Dying for debugging purposes
        dd($responseTime); // Always prints 0.0
    }
}
Run Code Online (Sandbox Code Playgroud)

但这始终表明0.0.显示服务器响应时间的正确方法是什么?

Joh*_*pit 15

我用过microtime(true) - LARAVEL_START.似乎给出了相当准确的响应时间.

正如波格丹在评论中提到的那样:

LARAVEL_START定义的常量是bootstrap/autoload.php包含的第一个文件public/index.php,因此这使它成为第一个要执行的语句.如果将中间件放在列表的最后,它的terminate方法将是在app->terminate()调用之前执行的最后一个方法,因此您应该可以很好地计算执行时间.

  • 我得到了 0.150,这是微秒、毫秒还是什么? (2认同)
  • @Nevermore 0.15 秒,或 150 毫秒 (2认同)