2

私は (高度に最適化されたバージョンの) CakePHP 2.3 を使用しており、私のアプリケーションは非常に遅いハードウェア (300MHz ARM) で実行されているため、可能な限り最適化を続けています。フレームワークの 1 つのメソッドは非常に頻繁に呼び出され、それほど高速ではありません (~1-5 ミリ秒) が、(出力を変更せずに) それを改善する方法を思いつきません - 合計で、合計時間の ~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 プロファイラーには、呼び出しの 1 つに対して次の出力があります。この質問を改善する方法を既に尋ねました:
ここに画像の説明を入力
(プロファイリングは通常の実行よりも約 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 に答える