以前に開発したコードの「ビット」をリファクタリングしようとしています。基本的に、このプロジェクトは、XSLT を効果的に使用する方法を知らなかった私の回答でした。そのため、PHP で XML 変換システムを開発しました。プログラムは XML ファイルのタグを読み取り、次の行に沿って何かを実行して HTML に変換します。
private function getTemplate(...) {
switch ($nodeName) {
case "a" :
// code here to generate a link tag
break;
case "box" :
// code here to generate the divs and whatnot to create a box
break;
case "ref" :
// look up an external reference file and include a bibliography
break;
default :
// do the default thing
}
}
スイッチへの分岐が 26 になり、1 回のスイッチ ブロックのコードが 1000 行を超えたことを除いて、すべてうまくいきました。言うまでもなく、メンテナンスが少し難しくなりました。
私が今行ったことは、各ブランチのコードを独自のファイル (「a.php」、「box.php」、「ref.php」... という名前) とinclude
そのファイルに毎回プルすることです。
if (file_exists("templates/$nodeName.php")) {
include "templates/$nodeName.php";
} else {
// do the default thing
}
繰り返しますが、これは機能しますが、ベンチマークでは、処理時間が 50% 遅くなることが示されています。これは、現在最大 4000include
の処理が行われているためだと思います。
私が考えていたのは、各テンプレートのコードを関数に入れ、関数が宣言されていない場合はファイルをインクルードしてから関数を実行することでした-それに関する唯一の問題は、既存のコードが.$this
などを使用して、元の関数の範囲。
このコードがリアルタイムで実行されないことを考えると (たとえば、XML を保存されている静的な HTML ファイルに処理するだけであり、その場で実行されるわけではありません)、何かアドバイスはありますか?