ホームページ > バックエンド開発 > PHPチュートリアル > PHP テンプレート エンジン SMARTY_PHP チュートリアル

PHP テンプレート エンジン SMARTY_PHP チュートリアル

WBOY
リリース: 2016-07-21 16:11:11
オリジナル
840 人が閲覧しました


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

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


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

1996 年に CGI が中国で普及したとき、初期の WEB プログラマーはすべて HTML を独学で学びました。しかし、インターネットが段階的に高速化するにつれて、ページのサイズは大きくなっていきました。も元の 20 ~ 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!」を表示するために処理されたテンプレート ファイルの例です。 ------------ -------------------------------------- ------------ ----------




;
<本文>
<本文>


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



処理方法については、ここでは省略します。特別な比較議論は後で行います。

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 でディレクトリ構造を指定する必要があります:
はじめに:
---------------- ------ -------------------------------------------- ------ --------

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



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


$smart->left_delimiter = "{/";


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



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

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


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

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


; ----- -------------------------------------- ----- ----------


以下はSMARTYです:

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

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



SMARTY はタグと行の 2 つの変数のみを使用しますが、PHPLIB テンプレートには追加のテンプレート ファイル ハンドラーと不可解な out があります。正直に言うと、最初にこれを知ったとき、なぜこれが存在するのかわかりませんでした。今では気まずいです。 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 公式サイト: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 の世界 (実際、これらは 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

PHP ファイル


Complex_teest_fast.php

PHPLib Template を使用してブロック テンプレートを分析する FastTemplate を使用してブロック テンプレートを分析する







/Include

PHPクラスファイルが含まれています.inc.php


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



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



TplTest.inc.php
テストの必要性 使用されるテストクラスにはメソッドが含まれますそのようなタイミング、ログの読み取り/分析などとして。



data.inc.php
ブロックを含むテンプレートをテストするときに使用されるデータファイル。 + Template によって処理される一般的なテンプレート ファイル

PCComplex_phplib.ihtml
Phplib テンプレートの使用 テンプレート ファイル


Complex_fast.ihtml
FastTemplate を使用する .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 などです)。以下は、私がとあるテストで得た結果です。 (テスト結果データの説明)

名前
説明
備考


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

max_seqを修正
最大処理時間のシーケンス番号
範囲は1~amount

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

min_seq
シーケンス最小処理時間の数値
範囲は1-amount

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

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


もちろん、テストの結果が信頼できないと感じた場合は、ブラウザを繰り返し押すことができます。更新ボタンを押すと、さまざまなテストの

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

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

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


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/314004.html技術記事 PHPを使用したMVC開発モデルのロジック層やプレゼンテーション層にはさまざまなテンプレートエンジンが用意されていますが、公式エンジンSMARTYの誕生により選択肢が変わりました。そのコンセプトと実装はかなり...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート