rulweb/laravel-profiler

Laravel框架5.2+的Profiler。

1.4.1 2020-05-22 11:19 UTC

This package is auto-updated.

Last update: 2024-09-22 20:40:20 UTC


README

Build Status Coverage Status

本项目的目标是跟踪控制台和Web Laravel框架的执行,让开发者更好地了解底层发生了什么。Laravel Profiler是为Laravel 5.2+设计的。

Laravel Profiler

它是如何工作的?

Profiler在以下情况下提供关于Laravel框架执行的详细信息

  • 当测试运行时(PHPUnit,Laravel Dusk)
  • 当Laravel通过控制台执行时(artisan)
  • 当Laravel通过浏览器请求执行时
  • 当Laravel通过Web请求执行,不期望HTML响应(API)时
  • 在导致Laravel框架终止的任何其他动作上。

Profiler不会向您的应用程序添加任何路由,也不会修改响应内容。

Profiler分为3部分

  • Profiler包 - Laravel的PHP包(此存储库)
  • Profiler客户端 - 用于查看Profiler包提供的数据的单页应用程序
  • Profiler服务器 - Profiler包和Profiler客户端之间的桥梁。

Profiler客户端和Profiler服务器都位于laravel-profiler-client存储库中

数据流

Profiler包跟踪Laravel执行,并使用HTTP将收集到的数据发送到Profiler服务器。Profiler服务器使用WebSockets将数据传递给Profiler客户端。

追踪器

被追踪、收集并传递给Profiler客户端的数据包括

  • 认证
  • 路由
  • 视图
  • 事件
  • 会话
  • 异常
  • 服务器状态
  • 数据库查询
  • 性能指标
  • Redis(从Laravel 5.7开始)
  • 请求(Web)/ 输入(控制台)
  • 响应(Web)/ 输出(控制台)
  • 应用程序(Laravel状态、配置、已加载的服务提供者、容器绑定、框架路径)

Profiler及其追踪器在请求/ artisan命令完成后执行其工作。这样可以尽可能地将框架执行时间和峰值内存使用率与实际值(没有Profiler影响)保持一致。

安装和配置

步骤1:安装Profiler包

要求:PHP 7.1+ 和 Laravel 5.2+

建议只为开发安装Profiler包

composer require rulweb/laravel-profiler --dev

Laravel 5.5+的用户可以继续进行,可以进入安装过程的第二步。

Laravel 5.4或更低版本,将服务提供者添加到您的应用程序中。不要将其添加到config/app.php中,因为这将为所有环境添加Profiler。相反,打开AppServiceProvider类,并在register方法中添加Profiler服务提供者

// app/Providers/AppServiceProvider.php

public function register()
{
    if (! $this->app->environment('production')) {
        $this->app->register(\JKocik\Laravel\Profiler\ServiceProvider::class);
    }
}

步骤2:发布配置文件

运行命令

php artisan vendor:publish --provider="JKocik\Laravel\Profiler\ServiceProvider"

... 并检查config/profiler.php文件以进行Profiler设置。

步骤3:安装Profiler服务器和Profiler客户端

建议只为开发安装Profiler服务器和Profiler客户端

npm install laravel-profiler-client --save-dev

步骤4:运行Profiler服务器和Profiler客户端

Windows用户:如果您在运行Profiler服务器或Profiler客户端时遇到任何问题,请检查下面的安装选项/问题部分。

运行命令

php artisan profiler:server

a) 对于您的本地机器

php artisan profiler:client

之后,您的浏览器应该会打开一个新标签页,Profiler客户端连接到Profiler服务器。

b) 对于Vagrant或任何其他不同于本地的机器

php artisan profiler:client -m

... 并根据控制台中的说明打开新的浏览器标签页。请记住,您需要自己将Profiler客户端连接到Profiler服务器,因为默认情况下Profiler客户端使用localhost。您可以在Profiler客户端界面中完成此操作。

步骤5:验证安装

运行命令

php artisan profiler:status

... 检查Profiler状态,并在Profiler客户端中查看Laravel执行的第一个数据。

安装选项/问题

如果运行Profiler服务器或Profiler客户端时遇到任何问题,请使用npm脚本来代替artisan命令。将新脚本添加到package.json文件中

"scripts": {
    "profiler-server": "node node_modules/laravel-profiler-client/server/server.js http=8099 ws=1901",
    "profiler-client": "http-server node_modules/laravel-profiler-client/dist/ -o -s",
    "ps": "npm run profiler-server",
    "pc": "npm run profiler-client"    
}

...然后运行Profiler服务器

npm run ps

...然后运行Profiler客户端

npm run pc

b) 如果您不希望每次运行Profiler客户端命令时都打开新的浏览器标签,请使用手动选项

php artisan profiler:client -m

c) 如果Profiler在您的机器上使用了默认端口,请在config/profiler.php文件中配置它们。

完成!

您现在可以使用Laravel Profiler了。享受吧!

用法

性能指标

Profiler提供基本性能指标,包括内存使用峰值和Laravel执行时间。您可以通过使用Profiler辅助函数来扩展指标

profiler_start('my time metric name');

// my code to track execution time

profiler_finish('my time metric name');

然后在Profiler客户端中检查结果(性能 > 自定义标签)。您应该保持唯一的指标名称,否则将跳过重复的指标,并报告为错误(具体方式取决于您在config/profiler.php文件中的异常处理设置)。

重要提示:在转移到生产环境或未安装Profiler的任何环境之前,请从您的代码中删除Profiler辅助函数。

Laravel Profiler针对测试环境

在测试时,Profiler将提供与常规请求/ artisan命令相同的数据。但是应用程序应该被终止。让我们看看Laravel提供的两个默认测试

public function testBasicTest()
{
    $response = $this->get('/');

    $response->assertStatus(200);
}

第一个测试将终止应用程序,Profiler将按预期工作。然而第二个测试

public function testBasicTest()
{
    $this->assertTrue(true);
}

... 将不会提供任何数据,因为这次应用程序没有终止。您可以通过添加terminate方法来强制Profiler工作

public function testBasicTest()
{
    $this->assertTrue(true);
    
    $this->app->terminate();
}

如果您想重置Profiler跟踪器,可以使用Profiler辅助函数

public function testBasicTest()
{
    factory(User::class)->create();
    
    profiler_reset();
    
    // act and assert
}

有关测试环境的重要提示:无法跟踪每个测试的内存使用峰值,因此在Profiler客户端中不会显示。

与Laravel Debugbar一起使用

不建议同时使用Laravel Profiler和Laravel Debugbar。Profiler将在Debugbar之后完成其工作,框架执行时间和内存使用峰值峰值将由Debugbar活动增加。一次使用Profiler或Debugbar中的一个。