ホームページ >php教程 >php手册 >PHPテンプレートエンジンSMARTY

PHPテンプレートエンジンSMARTY

WBOY
WBOYオリジナル
2016-06-13 12:46:06863ブラウズ


PHPを使用したMVC開発モデルのロジック層やプレゼンテーション層にはさまざまなテンプレートエンジンが用意されていますが、公式エンジンSMARTYの誕生により選択肢が変わりました。そのコンセプトと実装は非常に「前衛的」です。この記事では主に、他のテンプレート エンジンと比較した SMARTY の異なる特性について説明し、エンジンのインストールと使用方法を簡単に紹介し、小さなテスト ケースを使用して SMARTY テンプレートと PHPLIB テンプレートの速度と使いやすさを比較します。

1. MVC にはテンプレートが必要です
MVC は、SmallTalk 言語の開発過程で最初にデザインパターンとしてまとめられ、それぞれ「モデル」、「ビュー」、「コントロール」を表します。開発の役割は、大規模および中規模のプロジェクトでそれぞれの職務を実行します。ネットワーク アプリケーションの開発では、次の図を使用して概念間の関係を表すことができます。


この図は単純な WEB アプリケーションを示しています。ユーザーがブラウザー上で見る情報はデータベース サーバー上のコンテンツですが、事前にアプリケーション サーバーによって処理されています。開発者は、データ構造、データ処理ロジック、データ表現方法を確立する責任があります。

1996 年に CGI が中国で普及したとき、初期の WEB プログラマーは全員 HTML を独学で学びました。PERL で HTML 行を印刷することは難しくありませんでしたが、インターネットの進歩により、その速度は向上しました。段階的にページサイズも当初の 20 K から 30 K まで 10 倍に増加しました。 CGI プログラムを作成すると、PERL ソース コードと HTML ソース コードを分離するという緊急の要件が生じます。したがって、社会の進歩は開発チーム内の分業に反映されます。アーティストとプログラマーはお互いの仕事にあまり精通していないため、協力中にコミュニケーションをとるために合意された「言語」を使用する必要があります。

この言語は私たちの母国語でも英語でもありません。この用語は「テンプレート」と呼ばれ、ロジックと表現はそれに依存します。 HTMLとスクリプト言語の特徴を組み合わせた表現方法です。このようにして、プレゼンテーション層はロジック層で処理されたデータをユーザーが希望する形式で表示することができます。 Windows プラットフォームでの MFC 開発経験がある場合は、ドキュメント/ドキュメント テンプレート/ビューのカプセル化に精通しているはずです。これは非常に典型的な MVC の例です。 Web アプリケーションに関しては、個人的には J2EE の EJB/サーブレット/JSP が最も強力だと考えています。もちろん、シンプルで美しい Structs もあります。 もう 1 つのよく知られた実装は COM/DCOM ASP で、この組み合わせは我が国のほとんどの人に使用されています。

WEB アプリケーションでのいくつかの MVC 実装を比較することで、テンプレートに関する概念を得ることができます。つまり、HTML に挿入された一連のスクリプト、またはこの挿入されたコンテンツによって表される HTML に挿入されたスクリプト、つまりデータの変更です。以下は、ブラウザで「Hello, world!」を表示するためのテンプレート ファイルの例です。

はじめに:
-------------- -------------------------------------------------- ----------------




$greetings 🎜>




------------------------------------------------- - ----------------------



処理方法は今回は省略し、比較のために後述します。

2. SMARTY を選ぶ理由
PHP には、初期の PHPLIB テンプレートや新星である Fast テンプレートなど、数多くのテンプレート エンジンがあり、いくつかのアップグレードを経て、非常に成熟しました。安定した。現在使用しているテンプレート エンジンに非常に満足している場合は、続きを読んでください。フリー ソフトウェア愛好家、または効率性と優雅さを追求する開発者として、次の SMARTY の紹介は多少興味深いものになると思います。

個人的な好みを除いて、私は常に APACHE の XML エンジン Axis などの公式の標準実装を使用する傾向がありました。利点は、可能な限り最高の互換性が得られることです (たとえば、初期の MFC と Win3x の互換性は他のアプリケーション フレームワークよりも優れていました。もちろん、現在ではすべてのバージョンが非常に完成しています)。 SMARTY がリリースされる前は、PEAR の Integrated Template eXtension を使用していました。このエンジンは、PHPLIB テンプレートおよび Fast テンプレートとほぼ互換性があり、テンプレートの構文からテンプレートの処理まで、テンプレートがメモリに読み込まれ、parse() 関数が呼び出されて、プリセット タグが data に置き換えられます。

SMARTY がどのように行うかを見てみましょう。リクエストを受信した後、まず URL が初めてリクエストされたかどうかを判断し、その URL に必要なテンプレート ファイルを php スクリプトに「コンパイル」し、そうでない場合は URL のテンプレートをリダイレクトします。チェックに合格した後、再コンパイルが必要ないことを確認した後、すぐにリダイレクトできます。再コンパイル条件は、デフォルトではテンプレート ファイルが変更されています。

どうでしょうか?そういえば──これがJSPの原理なんですね!確かに、この種の「コンパイル」は、PHP のような解釈されたスクリプト エンジンで使用されると信じられないほど素晴らしいように思えますが、よく考えてみると、JAVA も JVM によって解釈され、実行されるのではありませんか?これを「不可能なことは何もない、ただ想像できるだけだ」といいます。

JAVA について話したので、PHP の将来について私の意見を述べさせてください。 PHP の公式 Web サイトは、バージョン PHP 5.0 が 2003 年末にリリースされると発表しました。このバージョンには、例外処理、名前空間、よりオブジェクト指向など、多くの新機能が含まれています。 JAVA に近づいていると言えます。SMARTY も新機能の 1 つであり、PHP は大規模および中規模のプロジェクトの開発により適しています。しかし、最初にそれを選んだ理由、つまり柔軟性と使いやすさからはどんどん遠ざかっているように思えます。しかし、ソフトウェアのライフサイクルの観点から見ると、PHP は成長段階にあり、商用アプリケーションに対応できるようにすることを期待して、開発者は PHP に多くのメリットをもたらします。 PHP の忠実なユーザーとして、PHP が常に「機能が不十分である」と非難されることは望ましくありません。

JSP に非常に似ているという理由だけで、SMARTY を選択する理由は何ですか?確かにもっと良い理由があります。まず、最初のコンパイルのコストが比較的高いことに加えて、テンプレート ファイルが変更されない限り、コンパイルされたキャッシュ スクリプトがいつでも利用できるため、parse() 時間が大幅に節約されます。 PHP のような豊富な関数ライブラリ。単語のカウントから自動インデント、テキストの折り返し、正規表現など、データの結果セットのページング表示機能が必要な場合に直接使用できます。強力な拡張機能も備えており、プラグインを通じて拡張できます。

事実は言葉よりも雄弁です。テストプログラムを設計し、速度と開発難易度の2つの要素に基づいてSMARTYとPHPLIBテンプレートを比較しました。PHPLIBテンプレートを選択した理由は、Patrickの記事「Choosing the Most Appropriate Template in the PHP World」にPHPLIBテンプレートがあるからです。 Fast テンプレートの競争では、PHPLIB テンプレートが大勝し、SMARTY が好敵手となりました。テストする前に、インストール プロセス中に注意する必要がある問題について説明します。

3. 考えられる問題
SMARTY の公式 Web サイトには詳細なユーザー マニュアルがあり、HTML 形式と PDF 形式のオンライン バージョンを選択できます。ここではマニュアルの既存の内容については説明しませんが、最初の使用時に発生する可能性のある問題についてのみ説明します。

最初の質問は非常に重要です。必要なファイルが見つからないということですか?誰もが SMARTY のデフォルトのディレクトリ構造に従ってアプリケーションを作成するわけではありません。これは手動で指定する必要があります。ディレクトリ構造が


であるとすると、index.php でディレクトリ構造を指定する必要があります:
Introduction:
---- -------- -------------------------------------- -------- ------------------

$smart->template_dir = "smarty/templates/"; Smart->compile_dir = "smarty /templates_c/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";

-- -------------------------------------- -------- ----------------------------



最初問題は解決しました。次の問題は 2 番目です。Dreamweaver で生成したばかりの美しいテンプレートを使用できないのはなぜですか?テンプレート ファイルに問題があるわけではありませんが、SMARTY のデフォルトのタグ区切り文字が {} であるため、残念ながら Javascript にはこのタグが確実に含まれています。幸いなことに、区切り文字として任意の文字と次の 2 つの文を使用できます:
紹介:
---------------------- --- ---------------------------------------------- --- ----


$smart->left_delimiter = "{/";
$smart->

- ---------------------------------------------- --- -----------------------------



これでインストールは基本的に完了しました。問題。

4. コントラストと類似性
最初にテストのデザインを検討します。主な判断要素はもちろんスピードです。速度テストでは、算術平均が使用されました。テスト ページでページ生成を N 回繰り返し、合計ページ生成時間を比較します。もう 1 つの重要な要素は使いやすさです (スケーラビリティに関しては、結果を比較する必要がありません)。そのため、使用するテンプレートが小さすぎることはできません。私は個人のホームページのページを使用しています。これは、Firework Dreamweaver で生成された、サイズが約 7K の HTML ファイルです。変数の設定も、PHPLIBテンプレートではブロック、SMARTYではセクションと呼ばれる、最もよく使われるブロックを採用しています。名前の違いを過小評価しないでください。使いやすさの基準は、テンプレート ファイルとスクリプト ファイルの構文が簡潔で使いやすいかどうかという 2 つの部分に分かれます。


テストに飛び込みましょう。まず 2 つのテンプレート ファイルの構文を見てみましょう。青いバーの左側は PHPLIB テンプレートで、右側は SMARTY に属します。個人の好みはさまざまなので、ここではコメントしません。スクリプト内の処理ステートメントの比較に重点を置き、最初に PHPLIB テンプレートを確認します:
概要:
---------------------- -------------------------------------------------- - ---


$tpl->set_file('phplib', 'bigfile.htm');
$tpl->set_block('phplib', 'row', '行 ');
for ($j = 0; $j $tpl->set_var('tag' ,"$j"); > ;parse('rows', 'row', true);
$tpl->parse('out', 'phplib'); ' );


------------------------------------- ---------- --------------------------------------


以下は SMARTY です:

紹介:
------------------------------------- -------- -------------------------------------- -----

$smart->assign('row',$row);
$smart->display('bigfile.htm'); ---------------------------------------------------- --------- --------------------



SMARTY はタグと行の 2 つの変数のみを使用します、PHPLIB テンプレートにはさらに多くのテンプレートがありますが、ファイル ハンドラーにも不可解な出力があります。正直に言うと、最初にこれを知ったとき、なぜこれが存在するのかわかりませんでした。今では気まずいです。 SMARTY の処理ステートメントが非常に少ないのはなぜですか?答えは、仕事はエンジンによって行われるということです。ソース プログラムを詳しく調べたい場合は、Smarty_compiler.class.php に _compile_tag() という関数があることがわかります。この関数はセクション タグを PHP ステートメントに変換します。通常のラベルとは異なり、パラメータやデータが用意されているため、スクリプトプログラミングの負荷が軽減されます。使いやすさでは、SMARTY の方が優れていると判断できます。

今度はスピードに重点を置く番です。結局のところ、熟練した Web 開発者にとって、テンプレート エンジンは言うまでもなく、最も困難なツールを習得するのは時間の問題です。学習曲線。また、Web アプリケーションは速度が命です。特に、同時アクセス数が多いサイトでテンプレート エンジンを使用する場合、速度はさらに重要になります。テストが始まる前、私は PHPLIB テンプレートが何度もアップグレードされており、基本的にバグがないため、この点では勝てるだろうと感じていました。また、ファイルが 2 つしかない相手とは異なり、SMARTY のエンジンは大きすぎます。

案の定、テスト結果は以下のとおりです。PHPLIB テンプレートには 25% の速度の利点があります。


しかし、もう一度更新を押したところ、常にこのようになるわけではありません。結果は、


PHPLIB は基本的には変わりませんが、SMARTY の速度が 25% 向上しました。更新を続けると、2 回目と同様の結果が得られます。SMARTY は PHPLIB テンプレートよりも 10% 近く高速です。これが、コンパイルされた型が解釈された型よりも高速である理由だと思います。 SMARTY エンジン自体は非常に大きく、テンプレートを php ファイルにコンパイルする必要があるため、速度は確かにコンパクトな PHPLIB テンプレートほど速くありません。しかし、これは初回のみの場合です。 2 回目のリクエストを受け取ったとき、SMARTY はテンプレートがすでにコンパイルされていることが判明したため、最も時間のかかるステップがスキップされ、相手は検索と置換を段階的に実行する必要がありました。これは、編集の原則で述べた「空間と時間の交換」の典型的な例です。

5. 結論
SMARTY に夢中になったら、何を待っているでしょうか?もちろん、これが万能であるという意味ではありません。MVC モデルを使用して個人の Web サイトを作成する場合と同様、作業負荷が軽減されないだけでなく、異なるレベル間の結合について常に考慮する必要があります。

SMARTY が適さないのは何ですか?マニュアルにある典型的な例として、天気予報 Web サイトを取り上げます。もう一つ思い出されるのは株式市場です。この種の Web サイトで SMARTY を使用すると、再コンパイルが頻繁に行われるため非効率になるため、PHPLIB テンプレートの方が適しています。

この記事は 2 つのエンジンを比較するものではなく、SMARTY の利点を説明するものです。これを使用する上で最も意味があるのは、これが新しい PHP システムの一部として、.NET と JAVA ONE の 2 つの主要なシステムに加えて、大規模および中規模の Web 開発のための他のオプションがあることです。 GNU プロジェクトにとって、その重要性は、劉氏と鄧小平の軍隊が数千マイルをデービー山脈に飛び込むのと何ら変わりません。

参考資料

SMARTY 公式 Web サイト:smarty.php.net
Wang Chen: 「PHP の世界で最も適切なテンプレートの選択」
この記事のテスト プログラムをダウンロードします。 test .tar.bz2
http://phpe.net/uploads/attach/article_1058233528.bz2
著者について
Yu Boxiang のペンネームは Yu Lai で、大学情報学部の出身です。国際ビジネスと経済学の博士号を取得。 GNU 愛好家は、さまざまなプログラミング言語を練習し、さまざまなシステム フレームワークを研究することを好みます。

投稿数: 1275 返信: 多くの PHP スクリプトはコア エンジンとして Smarty を使用しますが、Smarty とは何ですか? 2003-08-10 14:07

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



PHP プロジェクトのテンプレート アプリケーションは、中規模または大規模プロジェクトで推奨されるプレゼンテーション層を処理する良い方法です。ただし、テンプレートの実装に関しては、既存のテンプレート テクノロジーを比較する必要があります。

PHP の世界で最も人気のある 2 つのテンプレート処理は、PHPLIB Template と FastTemplate です。テクノロジーの使いやすさと速度を評価しました。結果を知りたいですか?

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

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

実際、私は PHPLIB テンプレートを「ひそかに」使用しています。非常に安定していて高速なようです。そのため、より優れた代替案を探すことについて心配したくありません。私もそれは知っていますが、この地球上に FastTemplate のようなものが存在すること (Perl の世界でも有​​名です)。ある日、同僚が私にこう言いました。「FastTemplate とはどのようなものでしょう? FastTemplate を試してみませんか?」

「わかりました、試してみましょう!」またはメソッドがプロジェクトに導入される場合は、それをより包括的に理解し、自分自身や同僚にそれを採用するよう説得するのに十分な理由を 1 つまたは複数見つけることが最善です。FastTemplate も例外ではありません。

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

FastTemplate の方が有名なようです。これは、Perl の世界でも当然のことですが、PHP の世界でも同様のようです。この点だけを考えれば十分です。人々はその能力を信じています。

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

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

変数設定
明らかに、{FOO} または {BAR} の形式は両方のテンプレートで指定された形式です。つまり、2 つのテンプレート処理方法では、テンプレート ファイル自体の外観が次のようになります。一貫性があること (たとえば、どちらの HTML ファイルにも、置き換えられる {} でマークされた変数が含まれています)。
テンプレートクラスの初期化(クラスビルダー)
テンプレートクラスのビルド時にテンプレートファイルが存在するディレクトリの場所を指定する必要があります。
変数置換
テンプレート処理で最も一般的に使用されるメソッドは変数置換です。メソッド名の違い (PHPLIB Template は 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 テンプレートと FastTemplate を理解したら、次のように入力できるはずです。この記事の本題 -- もちろん、アプリケーション環境では、使いやすく理想的な速度でシステムを構築できるコンポーネントを選択する必要があるため、これら 2 つの類似したテクノロジを評価することが非常に必要です。評価は、技術の使用の難易度と速度の 2 つの部分で構成されます。前者はレビュー部分、後者はテスト部分です。前者については、主に 2 つのクラスによって提供される API についてコメントしますが、後者については、当然のことながら、いくつかの単純なテスト コードを記述する必要があります。

ラウンド 1: テクノロジーの使いやすさ
このラウンドでは主に、PHPLIB テンプレートと 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 つはいくつかの変数を置き換える通常のテンプレート ファイルです。出力する内容に応じて繰り返し置き換える必要があるブロックを含むテンプレート ファイル。同様に、これら 2 つのテンプレート ファイルについては、解析用に 2 つの異なる PHP ファイルを作成する必要があります。

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

レベル 1
レベル 2
レベル 3
備考

/test


テスト システムのルート ディレクトリ







result.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 クラス ファイル .inc.php が含まれます



phplibTemplate.inc.php
PHPLIB テンプレート クラス ファイル



FastTemplate.inc .php
FastTemplate クラス ファイル



TplTest.inc.php
タイミング、ログの読み取り/分析などのメソッドを含む、テストで使用する必要があるテスト クラス、など。



data.inc.php
ブロックを含むテンプレートをテストするときに使用されるデータ ファイル。







/ihtml

テンプレート ファイルが含まれます。ihtml



simple_phplib .ihtml
PHPLIB Template によって処理される一般的なテンプレート ファイル



simple_fast.ihtml
FastTemplate によって処理される一般的なテンプレート ファイル



complex_phplib。 ihtml
PHPLIB Template を使用して処理されたブロックを含むテンプレート ファイル



complex_fast.ihtml
FastTemplate を使用して処理されたブロックを含むテンプレート ファイル







/logs

ログ file.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] (このテストをローカル以外のサーバーで実行する場合、ドメイン名は、テストが配置されているサーバーのドメイン名である必要があります (例: myパトリックと呼ばれる独自のマシンなど)。以下は私がとあるテストで得た結果です。 (テスト結果データの説明)

名前
説明
備考


総テスト数(連続)リクエストの総ページ数)
このパラメータは result.php ファイルで変更できます

max_seq
最大処理時間のシーケンス番号
範囲は 1 から量

max_value
最大処理時間の値
参考用ピークデータ

min_seq
最小処理時間のシーケンス番号
範囲は 1 ~ 量

min_value
処理時間の最小値
参考用のピークデータ

平均
平均処理時間
テストで最も価値のあるデータ


もちろん、テストの結果が信頼できないと思われる場合は、ブラウザの更新ボタンを繰り返し押して、さまざまなテストの

結果を観察することができます (理論的には、それらはほぼ一致するはずです)。同じ)。

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

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


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