我正在使用(高度优化/改编版本)CakePHP 2.3,我的应用程序运行在非常慢的硬件(300MHz ARM)上,所以我仍然在尽可能优化。框架的一种方法经常被称为非常快(~1-5ms),但我想不出一种方法来改进它(不改变输出) - 总共我花了大约10%的总时间这个方法:
public static function normalizeObjectArray($objects) {
$normal = array();
foreach ($objects as $i => $objectName) {
$options = array();
if (!is_int($i)) {
$options = (array)$objectName;
$objectName = $i;
}
list(, $name) = pluginSplit($objectName);
$normal[$name] = array('class' => $objectName, 'settings' => $options);
}
return $normal;
}
有没有人知道如何加快速度?
对于其中一个来说,探查器的输出有以下输出 - 我已经询问了如何改进pluginSplit
in this question:
(分析比正常执行慢大约10-15倍)
is_int
是那么慢还是那个时间“丢失”了?
答案 0 :(得分:1)
normalizeObjectArray是转换数组的方法:
public $foo = array(
'One',
'Two',
'Three' => array('option' => 1, 'other' => 2)
);
成:
public $foo = array(
'One' => array('className' => 'One', 'settings' => array()),
'Two' => array('className' => 'Two', 'settings' => array()),
'Three' => array('className' => 'Three', 'settings' => array('option' => 1, 'other' => 2))
);
如果不是尝试优化此代码,而是重构代码而不调用它,并确保无论在何处调用它,数组已经所需的格式(例如组件,帮助器,行为数组) ,逻辑是多余的,可以简单地删除。
答案 1 :(得分:0)
首先,你可以避免使用list
。相反,你可以这样做:
$normal[pluginSplit($objectName)[1]] = ... ;
其次,我认为(不确定)ctype_digit()
可以提高性能。
顺便问一下,你能举例说明$objects
的内容吗?这听起来像一个怪异的阵列......