yiisoft / profiler
Profiler
Fund package maintenance!
Open Collective
yiisoft
Installs: 280 447
Dependents: 4
Suggesters: 0
Security: 0
Stars: 18
Watchers: 16
Forks: 12
Open Issues: 1
Requires
- php: ^8.0
- psr/log: ^2.0|^3.0
- yiisoft/files: ^2.0
- yiisoft/strings: ^2.0
Requires (Dev)
- maglnet/composer-require-checker: ^4.2
- phpunit/phpunit: ^9.5
- rector/rector: ^0.15.0
- roave/infection-static-analysis-plugin: ^1.25
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.30|^5.1
- yiisoft/aliases: ^3.0
- yiisoft/di: ^1.2
README
Yii Profiler
The package provides an ability to record performance profiles.
Requirements
- PHP 8.0 or higher.
Installation
The package could be installed via composer:
composer require --dev yiisoft/profiler
If you use this package with Yii Config and there will be no @runtime
alias in yiisoft/aliases
configuration defined, application will throw "Invalid path alias" error.
To solve it, add the @runtime
alias to the yiisoft/aliases
configuration in params.php
:
return [ //... 'yiisoft/aliases' => [ 'aliases' => [ //... '@runtime' => '@root/runtime' ], ], //... ];
General usage
Profiling
<?php require __DIR__ . '/vendor/autoload.php'; use Psr\Log\NullLogger; use Yiisoft\Profiler\Profiler; use Yiisoft\Profiler\Target\LogTarget; $logger = new NullLogger(); $target = new LogTarget($logger); $profiler = new Profiler($logger, [$target]); $profiler->begin('test'); //...some code $profiler->end('test');
Nested profiling
$profiler->begin('test'); //...some code $profiler->begin('test'); //...some code $profiler->end('test'); //...some code $profiler->end('test');
Getting profiler messages
$messages = $profiler->getMessages(); print_r($messages);
Output
Array
(
[0] => Yiisoft\Profiler\Message Object
(
[level:Yiisoft\Profiler\Message:private] => application
[token:Yiisoft\Profiler\Message:private] => test
[context:Yiisoft\Profiler\Message:private] => Array
(
[token] => test
[category] => application
[nestedLevel] => 0
[time] => 1614703708.4328
[beginTime] => 1614703708.4328
[beginMemory] => 7696440
[endTime] => 1614703708.4331
[endMemory] => 7702392
[duration] => 0.0003058910369873
[memoryDiff] => 5952
)
)
)
Find profiler messages with a given token
$profiler->begin('test'); //...some code $profiler->end('test'); $profiler->begin('another test'); //...some code $profiler->end('another test'); $messages = $profiler->findMessages('another test'); print_r($messages);
Output
Array
(
[0] => Yiisoft\Profiler\Message Object
(
[level:Yiisoft\Profiler\Message:private] => application
[token:Yiisoft\Profiler\Message:private] => another test
[context:Yiisoft\Profiler\Message:private] => Array
(
[token] => another test
[category] => application
[nestedLevel] => 0
[time] => 1614703716.4328
[beginTime] => 1614703716.4328
[beginMemory] => 7696440
[endTime] => 1614703716.4331
[endMemory] => 7702392
[duration] => 0.0003058910369873
[memoryDiff] => 5952
)
)
)
Saving messages to storage
// obtain profiler $profiler = getProfiler(); // send profiler messages to targets $profiler->flush();
Testing
Unit testing
The package is tested with PHPUnit. To run tests:
./vendor/bin/phpunit
Mutation testing
The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:
./vendor/bin/roave-infection-static-analysis-plugin
Static analysis
The code is statically analyzed with Psalm. To run static analysis:
./vendor/bin/psalm
License
The Yii Profiler is free software. It is released under the terms of the BSD License.
Please see LICENSE
for more information.
Maintained by Yii Software.