2011-02-03 13 views
2

Smarty 3とその新しいレクサーについて、テンプレートデザイナーとしてどのくらいの力を与えるのだろうかと興奮していましたが、実際にそのまま棚に当たったとき、どれほど遅かったのか本当の失望。最初からテンプレートをコンパイルするには、Smarty 3では1秒以上かかりましたが、Smarty 2では同じテンプレートに約0.5秒かかりました。良くない。XMLベースのテンプレートエンジン対Smartyのレクサー

しかし、DOMDocument、SimpleXMLなどのモジュールが既に用意されている場合、なぜPHPで本格的な言語パーサーを実装する必要があるのですか?

XML拡張機能やDOMDocumentに基づいたPHP用のテンプレートエンジンはありますか?もしそうなら、パフォーマンスはどうですか?もしそうでなければ、誰かがそれを書こうとしましたか?

私が考えることができる欠点は、XHTMLやRSSなどのXMLベースのフォーマットでは本当に便利だということです。他の出力(非XML HTML、プレーンテキスト、CSSなど)を生成するためには、CDATAブロックを使用することができますが、かなり問題になる可能性があります。私が考慮していないテンプレート解析のためにXML/DOMを使用することに他に意味がありますか?

答えて

3

Smartyに関しては、IIRC Smartyは「コンパイル済みテンプレート」を使用しているため、「コンパイルフェーズ」で言及したパフォーマンスの問題が問題になる場合 - 各テンプレートは一度だけコンパイルされ、 (はるかに速い)キャッシュからの出力。

XMLパーサーを使用する際の問題は、HTMLが必ずしも整形式XMLであるとは限らないことです。あなたが有効なXHTMLを使用していても、HTMLエンティティをサポートするためにフープをジャンプすることができますし、埋め込まれたJavascriptなどのコーナーケースを見つけることができます(IMOはHTML5の最大の失敗です。すべての従来のSGMLはうまく構成されたXMLを使用することを主張しています.HTML委員会がこれを行っていれば、将来のテンプレートエンジンは標準XML APIを使用して書くのがはるかに簡単になりました。)しばらく前にXML-based template engineを書きました。 HTMLで動作させるには、Libxmlシステムカタログにエントリを追加する必要があります。これは十分に機能しますが、痛みです。ほとんどの人はあきらめて、簡単なものを使用します。ここで

1

は、私が知っているXMLベースのテンプレートエンジンの一部です:パフォーマンスの面で

http://phptal.org/

http://code.google.com/p/querytemplates/

http://www.hyperkit-software.com/projects/phptemplates/index.html

、私はほとんどのXML-を考えていませんコンパイル段階では大幅に高速です - PHP用の最新のテンプレートエンジンはコンパイルを使用するため、コンパイラのパフォーマンスは一般的には犠牲にされますより拡張性とメンテナンス性の高いエンジンコードベースを提供し、さらに最適化されたコンパイル済みテンプレートを生成します。 Robinは、テンプレートがコンパイルされているため、コンパイル段階がどれほど速いか遅いかは本当に気にしません。

しかし、XMLベースのテンプレートエンジンには他にも引数があります。個人的には、2つの異なるタグ構文を混合するという考え方が嫌いです。その1つ(Smarty)は、通常のXMLツールを使用して解析、処理、または検証することはできません。明確にするために、SmartyテンプレートのXML部分を解析することはできますが、XMLツールのテキストのように見えるSmartyタグを解析または変更することはできません。

カスタム構文(Smartyや他のほとんどのテンプレートエンジンで使用されているものなど)のもう一つの共通の引数は、これらのテンプレートエンジンが提供するすべての構文をPHPがすでに持っていることです。例えば、<?=ucfirst($person->name)?>はプレーンなPHPテンプレートの{$person.name|ucfirst}に似ています。これは、学習曲線、コンパイルステップ、デプロイする必要のないエンジン、テンプレートをレンダリングするランタイムオーバーヘッドなどを持たないPHP開発者にはすでに知られている構文を使用します。

+0

いいえ、学習曲線はいいですしかし、保証されたwell-formednessはいいです、あまりにも。私はphptalが後者を提供することを知っています。 – kojiro

関連する問題