jkocik / laravel-profiler
Laravel 框架的性能分析器
Requires
- php: >=7.2
- guzzlehttp/guzzle: ^5.0 || ^6.0 || ^7.0
Requires (Dev)
- fzaninotto/faker: ^1.5
- mockery/mockery: ^1.0
- php-coveralls/php-coveralls: ^2.1
- php-mock/php-mock: ^2.0
- phpunit/phpunit: ^8
- predis/predis: ^1.1
README
此项目的目标是跟踪 Laravel 框架的控制台和 Web 执行情况,并帮助开发者更好地理解底层发生了什么。Laravel Profiler 是为 Laravel 框架设计的。
支持的版本
它是如何工作的?
性能分析器在以下情况下提供关于 Laravel 框架执行的数据
- 当执行测试时(PHPUnit,Laravel Dusk)
- 当通过控制台执行 Laravel 时(artisan)
- 当通过浏览器请求执行 Laravel 时
- 当通过 Web 请求执行 Laravel 而不期望 HTML 响应(API)时
- 在执行任何其他导致 Laravel 框架终止的操作时。
性能分析器不会向您的应用程序添加任何路由,也不会修改响应的内容。
性能分析器分为 3 部分
- 性能分析器包 - Laravel 的 PHP 包(此存储库)
- 性能分析器客户端 - 单页应用程序,用于查看性能分析器包提供的数据
- 性能分析器服务器 - 性能分析器包和性能分析器客户端之间的桥梁。
性能分析器客户端和性能分析器服务器都位于 laravel-profiler-client 存储库中
数据流
性能分析器包跟踪 Laravel 执行情况,并通过 HTTP 将收集到的数据发送到性能分析器服务器。性能分析器服务器使用 WebSockets 将数据传递给性能分析器客户端。
跟踪器
跟踪、收集并传递给性能分析器客户端的数据包括
- 认证
- Redis
- 路由
- 视图
- 事件
- 会话
- 异常
- 服务器状态
- 数据库查询
- 性能指标
- 请求(Web)/ 输入(控制台)
- 响应(Web)/ 输出(控制台)
- 应用程序(Laravel 状态、配置、已加载的服务提供者、容器绑定、框架路径)
性能分析器和其跟踪器在请求/ artisan 命令完成后执行其工作。这使您的框架执行时间和内存使用峰值尽可能接近真实值(没有性能分析器的影响)。
安装和配置
步骤 1:安装性能分析器包
要求:PHP 7.2+
建议仅在开发时安装性能分析器包
composer require jkocik/laravel-profiler --dev
步骤 2:发布配置文件
运行命令
php artisan vendor:publish --provider="JKocik\Laravel\Profiler\ServiceProvider"
... 并检查 config/profiler.php 文件以确认性能分析器的设置。
步骤 3:安装性能分析器服务器和性能分析器客户端
建议仅在开发时安装性能分析器服务器和性能分析器客户端
npm install laravel-profiler-client --save-dev
步骤 4:运行性能分析器服务器和性能分析器客户端
Windows 用户:如果您在运行性能分析器服务器或性能分析器客户端时遇到任何问题,请检查下面的安装选项/问题部分。
运行命令
php artisan profiler:server
和
a) 对于您的本地机器
php artisan profiler:client
之后,您的浏览器应该会打开一个新的标签页,性能分析器客户端连接到性能分析器服务器。
b) 对于 Docker、Vagrant 或其他与本地不同的机器
php artisan profiler:client -m
... 并根据控制台中的说明打开一个新的浏览器标签页。请记住,您需要自己将性能分析器客户端连接到性能分析器服务器,因为默认情况下性能分析器客户端使用 localhost。您可以在性能分析器客户端界面中这样做。
步骤 5:验证安装
运行命令
php artisan profiler:status
... 以检查性能分析器状态并查看性能分析器客户端中的 Laravel 执行的第一个数据。
安装选项/问题
a) 如果您在运行性能分析器服务器或性能分析器客户端时遇到任何问题,请使用 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" }
... 然后运行性能分析器服务器
npm run ps
... 和性能分析器客户端
npm run pc
b) 如果您不想每次运行Profiler Client命令时都打开新的浏览器标签,请使用手动选项。
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 Client(性能 > 自定义标签)中的结果。您应该保持唯一指标名称,否则将跳过重复项,并报告为错误(具体方式取决于您在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 Client中不会显示。
与Laravel Debugbar一起使用
不建议同时使用Laravel Profiler和Laravel Debugbar。Profiler将在Debugbar之后完成其工作,并且由于Debugbar的活动,框架执行时间和内存使用峰值将增加。一次使用Profiler或Debugbar中的一个。