1

我正在尝试提高我网站中某些代码的性能,并找到了这个分析器:https ://github.com/loic-sharma/profiler

我已遵循该站点上的指南,并在其中一个站点控制器中包含以下内容:

 public function getTest() {

    $logger = new Profiler\Logger\Logger;
    $profiler = new Profiler\Profiler($logger);
    $profiler->startTimer('testLogging');




    $data = Article::select(array(
        'articles.id',
        'articles.article_date',
        'articles.image_link',
        'articles.headline',
        'articles.category'
    ))  ->get()
        ->toArray();
    var_dump($data);

    $profiler->endTimer('testLogging');
    Log::info('Hello World!');
    echo $profiler;

在浏览器中,我得到了预期的结果,并且可以在底部看到分析器栏。

我有一个问题:在此基本测试中,分析器栏在单击时不会保持打开状态,因此我无法查看日志等。我不确定为什么或如何进行修复。窗格打开然后立即再次关闭。

如果我删除最终的回声,它可以正常工作。

我似乎看不到工具栏中的计时器“testLogging”。

我在这里误解了一个概念吗?

如何对代码中的特定函数计时并显示结果?

谢谢

4

1 回答 1

7

例如,要在 Laravel 4 中正确使用分析器(loic-sharma/profiler),它不需要您创建对象的实例。

$logger = new Profiler\Logger\Logger;
$profiler = new Profiler\Profiler($logger);

Laravel 有这些漂亮的东西叫做 Facades ( http://laravel.com/docs/facades),profiler实现了它们,所以你可以像这样调用 Profiler 和 Log:

public function getTest() {

    Profiler::startTimer('testLogging');

    $data = Article::select(array(
        'articles.id',
        'articles.article_date',
        'articles.image_link',
        'articles.headline',
        'articles.category'
    ))  ->get()
        ->toArray();
    var_dump($data);

    Profiler::endTimer('testLogging');
    Log::info('Hello World!');
}

这不需要您回显 $profiler,所有输出将自动显示在浏览器的分析器栏中。

注意::现在在 Profiler 之后,这通常意味着您正在使用外观,重要的是您要了解外观和 $profiler 是完全不同的实体。

如果您尚未安装门面和/或服务提供者,请执行以下操作:

  1. 首先,您必须使用 composer 安装该软件包,确保在“require”中将其添加到您的 composer.json 之后运行 composer update。-您已经完成了此操作。
  2. 接下来添加'Profiler\ProfilerServiceProvider',到 app/config/app.php 中的服务提供者列表
  3. 接下来添加'Profiler' => 'Profiler\Facades\Profiler',到 app/config/app.php 中的类别名列表
  4. 然后在控制台运行php artisan config:publish loic-sharma/profiler

完成后,上面的修改代码应该可以完美运行。

只是为了澄清您做错了什么,您创建了一个新的分析器实例,new Profiler\Logger\Logger;如果您已经设置了外观,则分析器栏将显示(回显)到浏览器,因此当您echo $profiler;现在在浏览器中有两个分析器时会导致打开关闭问题,当您不这样做时,echo $profiler仍会显示该栏,因为它不是您创建的栏,因此无法正确显示您的输出。

如果您仍想使用您自己的分析器实例:

  1. 'Profiler\ProfilerServiceProvider',从 app/config/app.php 中的服务提供者列表中删除
  2. 'Profiler' => 'Profiler\Facades\Profiler',从 app/config/app.php 中的类别名列表中删除
  3. 然后在控制台运行php artisan dump-autoload

然后这将起作用:

public function getTest() {

    $logger = new Profiler\Logger\Logger;
    $profiler = new Profiler\Profiler($logger);
    $profiler->startTimer('testLogging');

    $data = Article::select(array(
        'articles.id',
        'articles.article_date',
        'articles.image_link',
        'articles.headline',
        'articles.category'
    ))  ->get()
        ->toArray();
    $logger->debug(var_dump($data));

    $profiler->endTimer('testLogging');
    $logger->info('Hello World!');
    echo $profiler;
}
于 2013-08-02T00:32:33.337 回答