【问题标题】:Codeigniter benchmarking, where are these ms coming from?Codeigniter 基准测试,这些 ms 来自哪里?
【发布时间】:2010-04-08 23:08:14
【问题描述】:

我正在对我的网站进行基准测试。

class Home extends Controller {

    function Home() 
    {
        parent::Controller();
        $this->benchmark->mark('Constructor_start');

        $this->output->enable_profiler(TRUE);
        $this->load->library ('MasterPage');

        $this->benchmark->mark('Constructor_end');
    }

    function index() 
    {
        $this->benchmark->mark('Index_start');

        $this->masterpage->setMasterPage('master/home');
        $this->masterpage->addContent('home/index', 'page');
        $this->masterpage->show();

        $this->benchmark->mark('Index_end');
    }
}

这些是结果:

加载时基类:0.0076
构造函数:0.0007
指数:0.0440
控制器执行时间(首页/索引):0.4467
总执行时间:0.4545`

我了解以下内容:

  • 加载时基类 (0.0076)
  • 构造函数 (0.0007)
  • 指数 (0.0440)

但是剩下的时间从哪里来?

【问题讨论】:

  • 结果的单位是什么?

标签: php codeigniter benchmarking


【解决方案1】:

我没有对 CI 驱动的网站进行很多基准测试,但 0.4545 似乎不是很快。

在控制器执行时间的保护伞下(但在您自定义的基准测试之外)发生的一件事是自动加载 config/autoload.php 文件中定义的所有内容。如果您在那里加载大量库或模型,那将增加您的控制器执行时间,而没有任何明显的原因。

【讨论】:

  • No 0.4545 不是很快,这是我在这里结束的主要原因...我将尝试在我加载的库中添加标记...
  • 很好,它似乎是一个插件。谢谢!
【解决方案2】:

我认为你的索引函数的最后一行应该是

$this->benchmark->mark('Index_end');

这个错字可能会导致看起来很有趣的结果。

【讨论】:

  • 不,这不是问题所在。只是问题中的一个错字。不过感谢您的注意...
【解决方案3】:

Codeigniter 自动对从请求到最终输出发送到浏览器的总时间进行基准测试(这是总执行时间)

此外,当它即将调用您指定的控制器/方法时(通常通过 url),它标记了该方法的开始,然后当该方法返回某些内容或将数据发送到输出时,它结束了该基准(这是您看到的控制器执行时间(主页/索引)

【讨论】: