性能分析器(Profiler)
Phalcon\Profiler 一个性能分析组件,可以实现多层嵌套:
- <?php
- $profiler = new Phalcon\Profiler();
- $profiler->startProfile('one');
- $profile = $profiler->getCurrentProfile(); // 'one'
- $profile = $profiler->getLastProfile(); // 'one'
- $profiler->startProfile('two');
- $profile = $profiler->getCurrentProfile(); // 'two'
- $profile = $profiler->getLastProfile(); // 'two'
- $profiler->stopProfile('two');
- $num = count($profiler->getProfiles()); // 1
- $profile = $profiler->getCurrentProfile(); // 'one'
- $profile = $profiler->getLastProfile(); // 'two'
- $profiler->stopProfile('one');
- $num = count($profiler->getProfiles()); // 2
DB 性能分析器(DB Profiler)
Phalcon\Db\Profiler 组件,它被用于分析数据库的操作性能以便诊断性能问题,并发现瓶颈:
- <?php
- use Phalcon\DB\Profiler as DbProfiler;
- $profiler = new DbProfiler();
- // 设置性能分析组件
- $connection->setProfile($profiler);
- $sql = "SELECT buyer_name, quantity, product_name "
- . "FROM buyers "
- . "LEFT JOIN products ON buyers.pid = products.id";
- // 执行SQL
- $connection->query($sql);
- // 获取最后一个分析结果
- $profile = $profiler->getLastProfile();
- echo "SQL Statement: ", $profile->getSQLStatement(), "\n";
- echo "Start Time: ", $profile->getInitialTime(), "\n";
- echo "Final Time: ", $profile->getFinalTime(), "\n";
- echo "Total Elapsed Time: ", $profile->getTotalElapsedSeconds(), "\n";
- echo "Total Usage Memory: ", $profile->getTotalUsageMemory(), "\n";
或者通过自己监听事件来实现性能分析:
- <?php
- use Phalcon\Events\Manager as EventsManager;
- use Phalcon\Db\Profiler as DbProfiler;
- $eventsManager = new EventsManager();
- $profiler = new DbProfiler();
- // 监听所有数据库的事件
- $eventsManager->attach('db', function ($event, $connection) use ($profiler) {
- if ($event->getType() == 'beforeQuery') {
- // 操作前启动分析
- $profiler->startProfile('db', ['sqlStatement' => $connection->getSQLStatement()]);
- }
- if ($event->getType() == 'afterQuery') {
- // 操作后停止分析
- $profiler->stopProfile();
- }
- });
- // 设置事件管理器
- $connection->setEventsManager($eventsManager);
- $sql = "SELECT buyer_name, quantity, product_name "
- . "FROM buyers "
- . "LEFT JOIN products ON buyers.pid = products.id";
- // 执行SQL
- $connection->query($sql);
- // 获取最后一个分析结果
- $profile = $profiler->getLastProfile();
- echo "SQL Statement: ", $profile->getSQLStatement(), "\n";
- echo "Start Time: ", $profile->getInitialTime(), "\n";
- echo "Final Time: ", $profile->getFinalTime(), "\n";
- echo "Total Elapsed Time: ", $profile->getTotalElapsedSeconds(), "\n";
- echo "Total Usage Memory: ", $profile->getTotalUsageMemory(), "\n";
你也可以基于 Phalcon\Profiler 或 Phalcon\Db\Profiler 建立你自己的分析器类。