rulweb / laravel-profiler
Laravel框架5.2+的Profiler。
Requires
- php: ^7.2.5
- guzzlehttp/guzzle: ^5.0 || ^6.0
Requires (Dev)
- fzaninotto/faker: ^1.8
- laravel/homestead: ^7.3
- mockery/mockery: ^1.0
- php-coveralls/php-coveralls: ^2.1
- php-mock/php-mock: ^2.0
- phpunit/phpunit: ^6.5
- predis/predis: ^1.1
README
本项目的目标是跟踪控制台和Web Laravel框架的执行,让开发者更好地了解底层发生了什么。Laravel Profiler是为Laravel 5.2+设计的。
它是如何工作的?
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中的一个。