我创建了一个自定义助手类模块,我正在这样调用:
$bench = Mage::helper('benchmark');
// ... do stuff ...
$bench->addBenchmark();
// ... more stuff ...
$bench->logResults();
这将输出数组中时间基准的结果。
该类非常简单,它基本上只是将当前microtime()
添加到数组中,然后在调用logResults()
时将该数组吐出。
问题是,我有一个循环,我在上面调用上面的代码,而不是记录"新鲜"每个循环的基准数据集,它自己复合并添加到现有的基准数组!
我希望每次调用Mage::helper('benchmark');
时都创建一组新的基准。
感谢任何帮助。
答案 0 :(得分:2)
使用无法执行的帮助程序,除非您在调用addBenchmark
方法时手动刷新数组的内容。
问题在于以下内容。在Mage.php
内,您请求的帮助程序存储在注册表中。在下次调用时,将从注册表中检索完全相同的帮助程序对象,而不是新的。它只在第一次调用帮助程序时创建一个实例。
/**
* Retrieve helper object
*
* @param string $name the helper name
* @return Mage_Core_Helper_Abstract
*/
public static function helper($name)
{
if (strpos($name, '/') === false) {
$name .= '/data';
}
$registryKey = '_helper/' . $name;
if (!self::registry($registryKey)) {
$helperClass = self::getConfig()->getHelperClassName($name);
self::register($registryKey, new $helperClass);
}
return self::registry($registryKey);
}
您可以选择模型,因为getModel()
每次调用工厂方法时都会返回一个新实例。虽然在我看来这是一个糟糕的编程案例,但也会影响你的表现。
我会在拨打addBenchmark
的新电话时选择刷新最新数据。如果要将所有数据存储在帮助程序中以供以后处理,或许总是返回数组中的最新密钥?虽然这是一个选择和味道的问题,所以我会把那部分留给你。
希望这会对你有所帮助!
答案 1 :(得分:2)
添加基准键并制作类似
的内容$this->benchmarks[$key]['start'] = microtime(true);
// ...
$this->benchmarks[$key]['finish'] = microtime(true);
所以你将为每次迭代都有一系列的开始 - 结束对
为什么不想使用Varien_Profiler?
Varien_Profiler::start($_profilerKey);
// ...
Varien_Profiler::stop($_profilerKey);