lajosbencz / prophiler
为Phalcon构建的PHP性能分析工具与开发者工具栏
Requires
- php: ~5.4
- psr/log: ~1.0
Requires (Dev)
- doctrine/orm: ~2.4
- elasticsearch/elasticsearch: ~1.3
- erusev/parsedown: ~1.5
- fabfuel/mongo: ~0.4
- phalcon/devtools: 1.3.*@dev
- phpmd/phpmd: ~1.0
- phpunit/phpunit: ~4.0
- squizlabs/php_codesniffer: ~1.0
Suggests
- fabfuel/mongo: ORM for Mongo, supports lazy loading, object references, subdocument classes and their collections.
- phalcon/devtools: This tools provide you useful scripts, helping to develop applications that use with Phalcon.
This package is auto-updated.
Last update: 2024-09-12 04:09:24 UTC
README
#Prophiler - 为Phalcon构建的PHP性能分析工具与开发者工具栏
演示
在这里您可以查看工具栏的实际操作: http://prophiler.fabfuel.de/demo.php
安装
您可以使用composer安装Prophiler。只需将其添加为依赖项
"require": {
"fabfuel/prophiler": "~1.0",
}
设置(常规)
通过以下简单步骤设置Prophiler和开发者工具栏。您可以在前控制器(例如Phalcon中的public/index.php)中完成所有操作。
###1. 初始化性能分析器(越早越好)通常最好尽早初始化性能分析器,以便尽可能多地测量执行时间。您应该在加载Composer自动加载器后立即在前控制器或引导文件中初始化性能分析器。
$profiler = new \Fabfuel\Prophiler\Profiler();
###2. 初始化和注册工具栏
为了可视化性能分析结果,您需要初始化和渲染Prophiler工具栏。该组件负责渲染性能分析基准测试和其他数据收集器的所有结果。将其放置在前控制器的末尾。
您还可以将其他数据收集器添加到工具栏中,例如,显示请求数据,如以下示例所示。
$toolbar = new \Fabfuel\Prophiler\Toolbar($profiler); $toolbar->addDataCollector(new \Fabfuel\Prophiler\DataCollector\Request()); echo $toolbar->render();
您还可以通过实现DataCollectorInterface
并添加到工具栏中,轻松地创建自己的数据收集器。
... $toolbar->addDataCollector(new \My\Custom\DataCollector()); ...
Phalcon应用程序的附加设置
###1. 将性能分析器添加到依赖注入容器中 将性能分析器实例添加到DI容器,以便其他插件和适配器可以在整个应用程序中使用。这应该在您的常规DI设置中或之后完成。
$di->setShared('profiler', $profiler);
###2. 初始化插件管理器 插件管理器会自动注册所有包含的Phalcon插件,并将它们附加到事件管理器。要使插件正常工作,请确保默认事件管理器已附加到您的Dispatcher、View和Connection服务。
$pluginManager = new \Fabfuel\Prophiler\Plugin\Manager\Phalcon($profiler); $pluginManager->register();
自定义基准测试
您可以轻松地向代码中添加自定义基准测试。
$benchmark = $profiler->start('\My\Class::doSomething', ['additional' => 'information'], 'My Component'); ... $profiler->stop($benchmark);
###或停止而不传递基准测试 在某些情况下(例如自定义适配器),可能很难将接收到的基准测试传递给stop()
方法。作为替代,您可以选择省略$benchmark
参数。如果是这种情况,性能分析器将简单地停止最后启动的基准测试,但无法运行重叠的基准测试。
$profiler->start('\My\Class::doSomeOtherThing', ['additional' => 'information'], 'My Component'); ... $profiler->stop();
聚合
Prophiler现在具有基准测试聚合功能。这些功能为您提供了更多见解,并且非常有用,例如:
- 快速查看重复执行的总体数量(例如数据库或缓存查询)
- 分析重复执行的最低、最高和平均执行时间
- 轻松查看(例如意外)相同数据库查询的重复执行
- 如果执行的总体数量超过自定义阈值,则发出警告
- 如果最大执行时间超过自定义阈值,则发出警告
设置
Prophiler附带一些聚合器,但您可以轻松地创建自己的。要设置聚合器,您只需在性能分析器实例中注册聚合器即可。
$profiler->addAggregator(new \Fabfuel\Prophiler\Aggregator\Database\QueryAggregator()); $profiler->addAggregator(new \Fabfuel\Prophiler\Aggregator\Cache\CacheAggregator());
就是这样。您立即看到所有数据库和缓存查询,按命令/查询分组,包括所有执行的总体次数、所有执行的总体持续时间以及最低、最高和平均执行时间。
日志记录
您可以使用Prophiler来记录事件和其他数据,并在时间轴和单独的“日志”选项卡中查看它们。如果您已经有一个日志基础设施,您可以将PSR-3兼容的Logger
适配器添加到其中。否则,您也可以直接实例化并使用它
$logger = new \Fabfuel\Prophiler\Adapter\Psr\Log\Logger($profiler); $logger->warning('This is a warning!', ['some' => 'context']); $logger->debug('Some debugging information', ['query' => ['user' => 12345], 'foo' => 'bar']);
适配器和装饰器
###Doctrine 为了分析Doctrine执行的所有SQL查询,您只需在您的Doctrine配置中注册SQLLogger适配器即可,例如在您的bootstrap.php
中如下所示
$sqlLogger = new Fabfuel\Prophiler\Adapter\Doctrine\SQLLogger($profiler); $entityManager->getConnection()->getConfiguration()->setSQLLogger($sqlLogger);
###PDO 为了分析您的PDO数据库操作,您可以使用Prophiler PDO装饰器。它将记录所有query()
& exec()
调用以及预编译语句。只需使用Prophiler装饰器装饰您的PDO实例,并用它代替
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'password'); $db = new \Fabfuel\Prophiler\Decorator\PDO\PDO($pdo, $profiler); $db->query('SELECT * from users'); $db->exec('DELETE FROM users WHERE active = 0'); $db->prepare('SELECT * from users WHERE userId = ?');
###缓存 为了分析Phalcon缓存后端请求,您只需用BackendDecorator装饰缓存后端。它将自动基准测试所有缓存操作。以下是一个使用APC后端的示例
$cacheFrontend = new \Phalcon\Cache\Frontend\Data(['lifetime' => 172800]); $cacheBackend = new \Phalcon\Cache\Backend\Apc($cacheFrontend, ['prefix' => 'app-data']); $cache = \Fabfuel\Prophiler\Decorator\Phalcon\Cache\BackendDecorator($cacheBackend, $profiler);
###Elasticsearch 为了分析Elasticsearch请求,您只需用ClientDecorator装饰Elasticsearch客户端
$elasticsearch = new Elasticsearch\Client(['your' => 'config']); $client = new \Fabfuel\Prophiler\Decorator\Elasticsearch\ClientDecorator($client, $profiler);
提示
###记录会话写入 为了记录会话写入,您可以在渲染工具栏之前提交会话(这也称为session_write_close()
)
session_commit();