hoathis/bench-bundle

此包已被 废弃 且不再维护。未建议替代包。

Hoa\Bench Symfony 2 扩展包。

dev-master 2014-09-21 13:51 UTC

This package is auto-updated.

Last update: 2021-10-04 11:06:50 UTC


README

Hoa

Hoa 是一套 模块化可扩展结构化 的 PHP 库。此外,Hoa 致力于成为工业界和学术界之间的桥梁。

Hoathis\BenchBundle Build Status

安装

将这些行添加到您的 require-dev 部分

{
    "require-dev": {
        "hoa/core": "*@dev",
        "hoa/bench": "*@dev",
        "hoathis/bench-bundle": "dev-master"
    }
}

然后安装依赖项

$ composer update hoathis/bench-bundle

并将 BenchBundle 添加到您的 AppKernel

//app/AppKernel.php

class AppKernel extends Kernel
{
    …

    public function registerBundles()
    {
        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            …
            $bundles[] = new \Hoathis\Bundle\BenchBundle\BenchBundle();
        }

        return $bundles;
    }
}

如何使用

Bench 服务

BenchBundle 将自动设置一个 bench 服务,您可以在 PHP 代码中使用它来基准测试应用程序的某些部分。结果将被汇总并在配置文件中报告。

<?php

namespace Hoathis\BenchDemoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DemoController extends Controller
{
    public function indexAction()
    {
        $this->container->get('bench')->renderView->start();
        $response = $this->render('HoaDemoBundle:Welcome:index.html.twig');
        $this->container->get('bench')->renderView->stop();

        return $response;
    }
}

在上面的例子中,我们创建了一个名为 renderView 的标记,用于测量渲染 Twig 模板所需的时间。

您可以通过简单地分配一个唯一的名称并按需嵌套它们来创建多个标记

public function indexAction()
{
    $this->container->get('bench')->fetchUsers->start();
    $users = …
    
    foreach($users as $user) {
        $this->container->get('bench')->fetchMessages->start();
        $user->messages = …
        $this->container->get('bench')->fetchMessages->pause();
    }
    
    $this->container->get('bench')->fetchMessages->stop(true);
    $this->container->get('bench')->fetchUsers->stop();

    $this->container->get('bench')->renderView->start();
    $response = $this->render('HoaDemoBundle:Users:index.html.twig', array('users' => $users));
    $this->container->get('bench')->renderView->stop();

    return $response;
}

如前例所示,您有三个方法来控制标记状态

  • Hoa\Bench\Mark::start():启动或暂停一个标记,
  • Hoa\Bench\Mark::pause($silent = false):暂停一个标记,
  • Hoa\Bench\Mark::stop($silent = false):停止一个标记。

您还可以使用它们的 原生 API 获取关于标记的更多信息。

Twig 辅助函数

BenchBundle 还添加了一个 Twig 辅助函数,您可以在模板中使用标记

<ul>
    {% benchstart 'usersLoop' %}
    {% for user in users %}
        <li>
            {{ user.username }}

            {% benchstart 'messagesCount' %}
            <span>
                {% if user.messages|length %}
                    No new mesages
                {% else %}
                   {{ user.messages|length }} new message(s)
                {% endif %}
            </span>
            {% benchpause 'messagesCount' %}
        <li>
    {% endfor %}
    {% benchstop 'messagesCount' %}
    {% benchstop 'usersLoop' %}
<ul>

这些标记的结果也将显示在 Web 分析器中。

控制台辅助函数

最后,BenchBundle 将配置一个 bench.helper 服务,您可以在控制台命令中使用它来访问标记

<?php
namespace Hoa\DemoBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class TestCommand extends ContainerAwareCommand
{
    public function __construct($name = null)
    {
        parent::__construct($name ?: 'hoa:bench:demo');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $bench = $this->getContainer()->get('bench.helper');

        $bench->start('foo');
        …

        $bench->start('bar');
        …
        $bench->stop('bar');

        $bench->stop('foo');

        $bench->summarize($output);
    }
} 

API 与 bench 服务相同,但使用辅助函数时,您将标记的名称作为 start/pause/stop 方法的参数传递。

当您调用 summarize 方法时,结果将在命令的输出中渲染

$ app/console hoa:bench:demo
# ...
+------+-----------------+-----------------+
| Mark | Time            | Percent         |
+------+-----------------+-----------------+
| foo  | 4.0034830570221 | 100             |
| bar  | 2.001620054245  | 49.996965785434 |
+------+-----------------+-----------------+