lajosbencz/prophiler

为Phalcon构建的PHP性能分析工具与开发者工具栏

1.4.0 2015-08-08 13:18 UTC

This package is auto-updated.

Last update: 2024-09-12 04:09:24 UTC


README

#Prophiler - 为Phalcon构建的PHP性能分析工具与开发者工具栏

Scrutinizer Code Quality Code Coverage Build Status License Latest Stable Version

演示

在这里您可以查看工具栏的实际操作: http://prophiler.fabfuel.de/demo.php

Timeline Preview

安装

您可以使用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();