2

我正在使用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 这个问题:(
在此处输入图像描述
分析比正常执行慢大约 10-15 倍)

is_int那个慢还是那个时间“丢失”在哪里?

4

2 回答 2

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))
);

如果您不尝试优化此代码,而是重构代码以不调用它,并确保无论在何处调用该数组,该数组都已采用所需格式(例如组件、助手、行为数组),则逻辑是多余的,可以简单地删除.

于 2013-06-05T15:52:16.777 回答
0

首先你可以避免list. 相反,您可以这样做:

$normal[pluginSplit($objectName)[1]] = ... ;

其次,我认为(不确定)ctype_digit()可以稍微提高性能。

顺便说一句,你能举一个内容的例子$objects吗?这听起来像一个奇怪的数组......

于 2013-06-05T12:38:41.153 回答