ホームページ  >  記事  >  php教程  >  テンプレートエンジン SMARTY

テンプレートエンジン SMARTY

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

テンプレート

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!」を表示するためのテンプレート ファイルの例です




$greetings
< ;/head>

$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 が常に「機能が不十分である」と非難されることは望ましくありません。

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

事実は言葉よりも雄弁です。テストプログラムを設計し、速度と開発難易度の2つの要素に基づいてSMARTYとPHPLIBテンプレートを比較しました。PHPLIBテンプレートを選択した理由は、Patrickの記事「Choosing the Most Ideal 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/";
$smart->config_dir = "smarty/configs/";
$smart->cache_dir = "smarty/cache/";




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


$smart->left_delimiter = "{/";
$smart->right_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');
for ($j = 0; $j $tpl->set_var('tag' ,"$j");
$tpl-> ;parse ('rows', 'row', true);
}
$tpl->parse('out', 'phplib');
$tpl->p('out');




それは 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 Basic 変更はありませんが、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





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