0

この質問は、共通ツールとして多くのプロジェクトに追加するために使用するプログラムの一部を最適化することに関するものです。この「テンプレート パーサー」は、いくつかの特定のタグを持つ html コードまたはその他のものを含む一種のテキスト パターンを使用し、レンダリング時に開発者が指定した値でこれらを置き換えるように設計されています。

関連するいくつかのクラスは素晴らしい仕事をし、期待どおりに機能します。必要に応じて設計要素を分離し、設計ブロックを簡単に適応/置換することができます。

私が使用するパターンは次のようになります (例外はありません)。

<table class="{class}" id="{id}">
    <block_row>
        <tr>
            <block_cell>
                <td>{content}</td>
            </block_cell>
        </tr>
    </block_row>
</table>

(以下のコード例は抜粋です)

解析は次のようなことを行います:

// Variables are sorted by position in pattern string
// Position is read once and stored in cache to avoid
// multiple calls to str_pos or str_replace
foreach ($this->aVars as $oVar) {
    $sString = substr($sString, 0, $oVar->start) .
            $oVar->value . 
            substr($sString, $oVar->end);
}

// Once pattern loaded, blocks look like --¤(<block_name>)¤--
foreach ($this->aBlocks as $sName=>$oBlock) {
    $sBlockData = $oBlock->parse();
    $sString = str_replace('--¤(' . $sName . ')¤--', $sBlockData, $sString);
}

クラス インスタンスを使用して、'addBlock' や 'setVar' などのメソッドを使用して、パターンにデータを入力します。

このシステムにはいくつかの欠点があります。その中には、メモリ内の複数のオブジェクト (ブロックのインスタンスごとに 1 つ) と、解析プロセス中に文字列操作関数への多くの呼び出しがあるという事実 (過去には preg_replace でしたが、現在は substr と仲間)。

私が取り組んでいるプログラムは、これらのテンプレートを多用しており、限界を迎えようとしています。

私の質問は次のとおりです(コードは必要ありません。アイデアまたは従うべきリードのみです):

  • 私はこれを悪用したと考えるべきであり、これらのテンプレートに対してそれほど多くの呼び出しを行う必要がないように管理を試みる必要があります (たとえば、単純なビュー スクリプトのみを使用してキャッシュを改善するなど)。

  • 私が書いた狂ったリソース消費者ではないデータを構造体に供給するための技術的な解決策を知っていますか? 私が書いている間、私は XSLT について考えています。もしそうなら、パフォーマンスを向上させることができますか?

事前にアドバイスをありがとう

4

1 に答える 1

1

XDebug拡張機能を使用してコードをプロファイリングし、コードのどの部分に最も時間がかかっているかを正確に調べます。

于 2013-05-03T20:54:07.787 に答える