ホームページ  >  記事  >  php教程  >  PHP の世界で最適なテンプレートの選択 - PHPLIB テンプレートと FastTemplate の比較

PHP の世界で最適なテンプレートの選択 - PHPLIB テンプレートと FastTemplate の比較

WBOY
WBOYオリジナル
2016-06-21 09:13:57890ブラウズ

比較|テンプレート

PHP プロジェクトでのテンプレート アプリケーションは、中規模または大規模プロジェクトで推奨されるプレゼンテーション層を処理するための良い方法です。ただし、テンプレートの具体的な実装に関しては、既存のテンプレート テクノロジをどのように使用するかを比較する必要があります。
PHP の世界で最も人気のある 2 つのテンプレート処理は、PHPLIB Template と FastTemplate です。テクノロジーの使いやすさと速度を評価しました。結果を知りたいですか?

問題の根源: FastTemplate を使用したことがありますか?
PHP プロジェクトのテンプレート アプリケーションに関しては、私と同僚は実際に多くのプロジェクトでテンプレート アプリケーションに触れてきました。その利点に関しては、実際の開発段階とデザイン パターンの観点の両方で、すでに多くの利点があると思います。 「先人たちと賢人たち」はそれについて議論しました。プロジェクトの実装に関する限り、一部の中規模または大規模プロジェクトでは、HTML (およびその他のテキストベースのプレゼンテーション層) と PHP コードを効果的に分離することで、インターフェイス設計者とアプリケーション作成者のパフォーマンスをそれぞれ改善できるだけでなく、開発フェーズ 作業効率も向上し、プロジェクトのテストやメンテナンスにも大きな利便性をもたらします。

しかし、この記事の目的は、テンプレートの長所と短所について議論することではなく、PHP プロジェクトでテンプレートを使用する方法についての有益なチュートリアルとして機能することでもなく、最も一般的な 2 つのテンプレート処理方法を比較することです。アプリケーションの観点から見た PHP の世界 (実際には、これらは PHPLIB Template と FastTemplate という 2 つのテンプレート クラスにすぎません)。

実際、私は PHPLIB テンプレートを「静かに」使用しています。非常に安定しており、速度も優れているようです。そのため、より優れた代替案を探すことを心配したくありません。ただし、私はこの地球上でテンプレートがあることを知っています。 FastTemplate のようなものもあります (Perl の世界では今でも有名です)。ある日、同僚が私にこう言いました。「FastTemplate とはどのようなものでしょう? FastTemplate を試してみませんか?」メソッドをプロジェクトに組み込む場合は、それをより包括的に理解し、自分自身や同僚にそのメソッドを採用するよう説得するのに十分な理由を 1 つまたはいくつか見つけることが最善です。FastTemplate も例外ではありません。

主人公が登場: PHPLIB テンプレートと FastTemplate を理解する
前に述べたように、私はしばらく PHPLIB を使ってきました - 画面の前にいるあなたも私と同じで、この優れたツール ライブラリに深い感銘を受けているかもしれません。同様に、テンプレート ソリューションを探し始めたときは、当然、手元にあるツールボックスを検索したため、PHPLIB の Template クラスを見つけました。それが提供する API をざっと見た後 (もちろん、PHPLIB の詳細なドキュメントのおかげで)、私はそれを使い始め、今に至ります。

FastTemplate のほうが有名のようですが、これは当然のことながら、これが富を築いた Perl の世界でも同様であり、この点だけでも、人々がそのことを信じ込むのに十分です。能力。

2 つの使い方について、本当はここでもう少し言いたかったのですが、結局、具体的に 2 つのチュートリアルを書いたとしても、既存のチュートリアルほど普及しないと感じています。この記事の参考資料には、PHPLIB Template と FastTemplate に関する有名なチュートリアルが含まれています。これら 2 つのテンプレートまたはそのいずれかについてよく知らないと思われる場合は、まずこれら 2 つの記事を読むことをお勧めします。役立つテンプレート アプリケーションの知識。

(何度かマウスをクリックしたり、目を丸くしたり、自分でテストコードを書いたりした後) これで、両方のテンプレートについてある程度理解でき、それらの間に多くの類似点があることに気づいたかもしれません。その点を以下にまとめます。

変数設定
明らかに、{FOO} または {BAR} の形式は両方のテンプレートで指定された形式です。つまり、2 つのテンプレート処理方法では、テンプレート ファイル自体の外観は一貫している必要があります。 、HTML ファイルには、置換される {} でマークされた変数が含まれています)。
テンプレート クラスの初期化 (クラス ビルダー)
は、テンプレート クラスのビルド時にテンプレート ファイルが存在するディレクトリの場所を指定する必要があります。
変数の置換
テンプレート処理で最も一般的に使用されるメソッドは変数置換です。メソッド名の違い (PHPLIB テンプレートは set_var() を使用しますが、FastTemplate は assign() を使用します) を除けば、使用法はほぼ同じです。 ( key, value) を使用するか、配列 (array(key=>value)) を直接渡すこともできます。
テンプレートファイルの処理
は、テンプレートファイルごとにハンドラーを指定する方法を採用していますが、同時にハンドルを変数の値として使用して、別のテンプレートファイルの変数を置き換えることもできます。
解析と出力のプロセス
はすべて、parse() メソッド (これらのメソッドの名前は実際には同じです) を呼び出して、出力する必要があるテンプレート ファイルを解析してハンドルに割り当て、その後、それぞれの出力メソッドを呼び出す必要があります。 (PHPLIB Templateのp())、FastTemplateのFastPrint())はハンドルの内容を出力して処理を終了します。
解析プロセスを繰り返します
たとえば、データベースから複数のレコードを表示する必要があり、テンプレート ファイルには置換可能な変数行しか含まれていない場合、このような関数が非常に必要になります。どちらにもそのような関数がありますが、使用方法が少し異なります (PHPLIB テンプレートは parse(handler, value, true) を使用しますが、FastTemplate は値の前に追加のドットを付けて parse(handler, .value) を使用します)。 PHPLIB テンプレートのメソッドは比較的エレガントに構築されていることがわかります。
ブロック解析のプロセス (または動的解析と呼ぶこともできます)
データベースから修飾されたデータを取得し、それを Web ページに表示する必要があると想像してください。ただし、条件が異なるため、次のようなデータが存在するかどうかを明確に知ることはできません。データの数 - 現時点でテンプレートを使用したい場合は、ブロックが最適な選択です。これは、テンプレート内の特定のシンボルで定義された部分であり、(前の解析が次の解析によって上書きされるのではなく) 繰り返し解析して出力 Web ページに追加できます。ブロックは以下のようになります (左側は PHPLIB テンプレートで使用されるブロック設定、右側は FastTemplate で使用されます):

さて、上記の淡いテキストの紹介でまだ少し混乱している場合は、それでは、2 つの詳細なテンプレート処理ルーチンを見てみましょう。 (次のテスト コードを調べることに興味がある場合は、次の 2 つの例が実際にそこから派生していることがわかります)


どうでしょうか、ほとんど同じように感じますか?以下はブロック解析の例で、同じ効果が得られます:


テストの目標と結果
PHPLIB Template と FastTemplate の理解を終えたら、この記事の本題に到達できるはずです -もちろんアプリケーション環境では、使いやすく、理想的には高速な部品を使用してシステムを構築する必要があるため、2 つの類似したテクノロジを評価する価値があります。評価は技術の使いにくさとスピードの2つの部分から構成され、前者がレビュー部分、後者がテスト部分となります。前者については、主に 2 つのクラスによって提供される API についてコメントしますが、後者については、当然のことながら、いくつかの単純なテスト コードを記述する必要があります。

ラウンド 1: テクノロジーの使いやすさ
このラウンドでは主に、PHPLIB Template と FastTemplate によって提供される API の使用について検討します。前者によって提供される API は、PHP の一般的なコーディング規約に準拠していると言えます (特に、プロジェクトで PHPLIB の他のクラスが使用されている場合、そのような標準化はプロジェクト全体に良い影響を与えます)。後者のメソッドは、名前が常に少しぎこちなく感じられます (これが FastPrint() などの私の狭い視野だけだと思わないでください) し、メソッドのパラメータはあまり「本物」ではありません。先ほどのコードからもわかります。

もう 1 つ指摘しなければならない点は、FastTemplate は最新バージョンまでテンプレート ブロックの解析をサポートしていなかったということです。つまり、以前のバージョンを使っていた場合、データベースなどのレコードの出力処理をする際に、この内容を別途どこかに保存しておいて、テンプレート解析の際にこのファイルを添付するという手間がかかっていました。これは、特に Web デザイナーにとってはイライラすることです。

もちろん、調査する必要があることがもう 1 つあります。それは、PHP バージョンのサポートです。 PHPLIB は、FastTemplate に似た PHP3 の時代に作成されました。しかし、私たちのアプリケーションによると、PHPLIB は現在の PHP4 環境で非常にうまく動作し、FastTemplate の Web ページには、PHP4 のいくつかのバグがまだある可能性があることを示す情報が表示されます。

さて、これだけ話した後 (おそらく、FastTemplate についての悪口ばかりだと思うでしょう)、このラウンドの勝者は明らかです: PHPLIB テンプレート、特に PHPLIB の他のクラスを同時に使用している場合、そのような技術的な容易さより明白です (同じ開発チームによるこれらの API に慣れていないわけではありません)。

ラウンド 2: 処理速度
おそらくこれが多くの人が最も懸念している部分です - このラウンドでは、テンプレート処理の 2 つの方法を使用します。1 つは従来の分析と置換で、もう 1 つはゾーン比較ブロック解析と置換 - 同時に、これら 2 つの方法は、実際のシステムで最もよく使用される方法でもあります。前者は一般的なページ処理であり、後者はデータベースのコンテンツの出力処理です。同時に、2 つのテンプレート クラスで使用されるテンプレート ファイルの形式は基本的に同じであるため、解析する 2 つのテンプレートにほぼ同一のテンプレート ファイルを提供でき、テストの信頼性が高まります。

このような速度テストを行う前に、テスト計画を作成します。簡単に言うと、2 つの処理メソッドに対して 2 つの PHP テスト ページが作成され、同時にこれら 2 つのページを呼び出すコントロール テスト ページが作成されます。を複数回実行し、テストデータを収集する時間を記録します。 (興味がある場合は、次の詳細なテスト計画を参照することもできます。これは、このテストをより深く理解するのに役立ちます。)

概要 -- テスト システム全体が完了したら、以下のファイルを取得できるはずです。 /test ディレクトリのチェックリスト:

(やや複雑なテスト計画)
まず、テスト用のハードウェアとソフトウェアの環境を決定します。ハードウェアは、Intel Celeron 733MHz、256M RAM、40G HDD、ソフトウェア内の OS である必要があります。プラットフォームは Win2K Pro、Web サーバーは Apache+PHP で、モジュール モードで実行されます。

2 番目のステップは、このテスト用のシステムを計画することです。もちろん、最初に Web サーバーのドキュメント ルート ディレクトリに新しいディレクトリ tpl_test を開き、このテスト用のすべてのファイルを配置します。次に、/tpl_test の下にインクルード ディレクトリを作成して、 2 つのテンプレート クラス ファイル (テストのコア、ファイル拡張子は .inc.php です) とテスト クラス ファイル (タイミング、ロギング、ログの読み取り、分析などの機能が含まれ、ファイル拡張子は .inc.php です)およびデータ ファイル (ブロック解析のテストの準備として、主に 2 次元配列が含まれ、ファイル拡張子として .inc.php が付いています)、使用するテンプレート ファイル (必要なテンプレート ファイル) を保存するための ihtml ディレクトリを作成します。ファイル拡張子が .ihtml の解析対象)、テストによって生成されたログを保存するためのログ ディレクトリを作成します (テスト データが実際にはこれらのログの分析から取得され、ファイルが .log であることが後でわかります)拡大)。もちろん、2 つのテンプレートの処理用 PHP ファイルは /test ディレクトリに配置されます。このテストの最も重要な点は、PHP ファイルを作成し、テンプレート処理を担当する上記のファイルを数回呼び出す必要があることです。たとえば、ファイル fast_test.php は FastTemplate を使用してテンプレートを解析し、phplib_test.php はPHPLIB テンプレートが解析され、結果として得られる PHP ファイルは、テスト データを取得するために HTTP 経由で上記の 2 つのページを複数回リクエストします。

解析するテンプレートと PHP プログラムの作成を選択します。これは、2 つのテンプレート処理方法のテンプレート ファイル自体の形式要件がほぼ同じであるためです (たとえば、置換される変数は {VAR} の形式であるなど)。 )、同じテストができる限り保証されます。前述したように、2 つのテンプレート アプリケーションを共通にシミュレートするために、2 つで使用されるテンプレートは可能な限り同一です。実際のシステムで使用される一般的なページ処理とデータベース コンテンツの出力処理、テストで使用されるテンプレート ファイルも 2 つのタイプに分けられます。1 つはいくつかの変数を置き換える通常のテンプレート ファイルで、もう 1 つは置き換えられるブロックが含まれるテンプレート ファイルです。出力したい内容に応じて繰り返し置き換える必要があります。同様に、これら 2 つのテンプレート ファイルについては、解析用に 2 つの異なる PHP ファイルを作成する必要があります。

テスト メソッド - ブラウザで /test/result.php にリクエストを送信します。パラメータ type=[simple|complex] を指定する必要があります。返された結果では、シンプル モードまたはコンプレックス モードで 2 つのテンプレートを確認できます。 。 試験結果。



レベル 1 レベル 2 レベル 3 備考
/test テスト システムのルート ディレクトリ

result.php は、テストを実行して結果を生成する PHP ファイルです。テストの際は、ブラウザでこのページをリクエストするだけで済みます。テスト情報を取得します
simple__test_phplib.php PHPLIB テンプレートを使用して一般的なテンプレートを分析する PHP ファイル
simple__test_fast.php FastTemplate を使用して一般的なテンプレートを分析する PHP ファイル
complex__test_phplib.php PHPLIB テンプレートを使用してブロック テンプレートを分析する PHP ファイル
complex__test_fast.php は、FastTemplate を使用して、ブロック テンプレートを使用して PHP ファイルを分析します

/include には、PHP クラス file.inc.php が含まれます
phplibTemplate.inc.php PHPLIB テンプレート クラス ファイル
FastTemplate.inc.php FastTemplate クラス ファイル
TplTest.inc.php が存在しますテスト 使用する必要があるテスト クラスには、タイミング、ログの読み取り/分析などのメソッドが含まれます。
data.inc.php は、ブロックを含むテンプレートをテストするときに使用されるデータ ファイルです。

/ihtml には template files.ihtml が含まれています
simple_phplib.ihtml は、PHPLIB テンプレートによって処理される一般的なテンプレート ファイルです
simple_fast.ihtml は、FastTemplate によって処理される一般的なテンプレート ファイルです
complex_phplib.ihtml は、PHPLIB テンプレートによって処理されるブロックを含むテンプレート ファイルです
complex_fast . ihtml は、FastTemplate を使用して、ブロックを含むテンプレート ファイルを処理します

/logs には、log files.log が含まれます
simple_phplib.log は、PHPLIB テンプレートを使用して、一般的なテンプレートによって生成されたログを処理します
simple_fast.log は、FastTemplate を使用して、一般的なテンプレートから生成されたログを処理します
complex_phplib.log PHPLIB テンプレートを使用して、ブロック テンプレートで生成されたログを処理します
complex_fast.log FastTemplate を使用して、ブロック テンプレートで生成されたログを処理します

テスト システムを設計して作成し、Web デザインを担当する同僚に 2 つのテンプレートを依頼した後、これにアクセスできますシステム - 初期段階でのすべての大変な作業は、ブラウザのアドレス バーに http://localhost/tpl_test/result.php?type=[simple|complex] と入力するだけで済むことを意味します (このテストを別の非ローカル サーバーで行う場合、ドメイン名は、そのサーバーが配置されているサーバーのドメイン名でなければなりません (たとえば、私自身のマシンの名前は Patrick など)。以下は私がとあるテストで得た結果です:(テスト結果データの説明)

名前説明メモ
amount テスト総数(このページの連続リクエスト総数) このパラメータはresult.phpで変更可能です。ファイル
max_seq 最大処理時間の連番範囲は1~amount
max_value 最大処理時間のピーク値データは参考用
min_seq 最小処理時間の連番範囲は1~amount
min_value ピーク最小処理時間の値データは参考用です
平均 平均処理時間テストで最も価値のあるデータ







もちろん、1 つのテストの結果が信頼できないと思われる場合は、ブラウザの更新ボタンを繰り返し押して、別のテストの結果を観察することができます (理論的には、それらはほぼ同じであるはずです)。

テスト結果と「XX Choice Award」の受賞
さて、速度テストの第 2 ラウンドでは、PHPLIB Template が驚くべき 2 倍の速度で FastTemplate を破りました。同時に、第 1 ラウンドでは、PHPLIB Template は優れた API 設計と使いやすさが人気です。結果は明白で、もちろん PHPLIB テンプレートが最優秀賞を受賞しました。同時に、このテストにより、PHPLIB クラス ライブラリの設計についての理解も深まりました。

主観的評価
結果が得られたので、当然のことながら FastTemplate はプロジェクトに入力できません。結果からすると、変化のない結果を得るまでに半日かかったように見えますが (PHPLIB テンプレートは引き続きプロジェクトで非常によく使用されています)、テストプロセス、特に PHP を使用したテスト方法は非常に価値があり、将来同様の決定を行う際に一定の参考となる役割を果たすはずです。

参考文献
この記事のテストコードをダウンロードしてください (article_256.zip)

PHPLIB Template と FastTemplate を紹介する有名な記事

Templates, The PHPLIB Way
David Orr 著、2000 年 5 月
(http://www.phpbuilder .com/columns/david20000512.php3 )
(PHPLIB テンプレート)
テンプレート - PHP3 でテンプレートを使用する理由とその方法
Sascha Schumann 著、1999 年 3 月
(http://www.phpbuilder.com/columns/sascha19990316.php3 )
(FastTemplate)
PHPLIB テンプレートと FastTemplate のホームページ

PHP ライブラリのホームページ
(http://phplib.netuse.de )
FastTemplate のホームページ
(http://www.thewebmasters.net/php/FastTemplate.phtml )
その他のテンプレート処理に関する記事と PHP に関するその他の情報
PHP Builder (http://www.phpbuilder.com)

上記記事の中国語翻訳とその他の中国語 PHP 情報
PHP 中国語ユーザー (http://phpuser.com )



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。