7

PHP で Smarty を使用すると、場合によっては余分な時間が必要になることがわかりました。

1) PHP 自体とはまったく異なる構文を使用している
2) ドキュメントには「エスケープ」などの詳細が記載されていないため、小さなケースを確認する必要がある

http://www.smarty.net/manual/en/language.modifier.escape.php

escape:"quotes" は二重引用符のみ、または単一引用符にも使用されるため、テストするコードを記述する必要があります。また、エスケープの場合:「javascript」 -- 何がどのようにエスケープされているのか正確にはわかりません。

3) 複雑な場合、ヘルパー関数または修飾子を記述する必要があるため、新しいファイルを作成して、最終的に PHP で再度実行する必要があります。

ところで、Smarty を使用すると、PHP を単独で使用するよりも速度が向上しますか? ありがとう。

4

11 に答える 11

22

まず、PHPはテンプレート言語です。PHPベースのWebアプリケーションにテンプレートシステムを使用することについて話すときは、このことを覚えておいてください。

テンプレートエンジンを使用することについて私が今まで聞いた唯一の「本当の」議論は、PHPを知らず、信頼できないテンプレートデザイナーがいる場合に便利な、テンプレート操作用のより単純な言語を提供するというものでした。 PHPを慎重に使用する方法を学びます。

これらの議論に関して、テンプレート設計者がテンプレート設計に十分なPHPを学ぶ能力がない場合は、おそらく新しいテンプレート設計者を見つけることを検討する必要があると思います。さらに、PHP自体は、テンプレートとコードで使用する可能性のある制御ステートメントに異なる構文を提供します。例えば:

<? foreach($array as $key => $val): ?>
    <?= $val ?>
<? endforeach; ?>

VS:

<?php
    foreach($array as $key => $val) {
        echo $val;
    }

?>

個人的には、次の理由でテンプレートエンジンがPHPで発生したと思います。

  1. それは他の言語がそれをする方法です
  2. 優れたPHPプログラマーは、プレゼンテーションとアプリケーションのロジックを強制的に分離する方法が必要であり、テンプレートがこれを行う簡単な方法であることに気づきました。

最初の理由はちょっとばかげています。2番目の理由は、少しの自制心と、アプリケーションでレイヤーを分離する必要性についての基本的な理解でさえ克服できます。MVCデザインパターンは、この問題に取り組む1つの方法です。いくつかの自己制御を実行する限り、私のルールは、必要なループと、ステートメントが使用される場合、および画面の出力をフィルタリング、エスケープ、フォーマットする関数のみを使用することです。

Smartyを幅広く使用してきたので、正直なところ、解決策よりも乗り越えるためのハードルが常に高くなっていると言えます。どちらかといえば、PHPベースのテンプレートに切り替えることで、テンプレートとコードの両方の開発時間が実際に短縮されました。

于 2009-05-17T16:51:06.220 に答える
6

テンプレートエンジンは好きではありません。PHPにとって、それらは非常に損失が大きく、リソースを大量に消費します。

MediaWikiでは、バージョン1.6.x前後で、デフォルトでSmartyの使用を中止し、PHPの組み込みテンプレートを使用するだけで、パフォーマンスが大幅に向上しました。

テンプレーティングシステムでやりたいことのほとんど(リンクの追加、色の変更、テキストやページのセクションの削除)は、イベントフックの単純なシステムで行う方がよいことがわかりました。

オープンなマイクロブログプラットフォームであるLaconicaは、デフォルトではテンプレートを作成しません。テンプレートに夢中になっている人のためのプラグインがあります。

于 2009-05-17T16:54:39.930 に答える
4

Smarty は確かに最高のテンプレート エンジンの 1 つです。私の経験では、PHP の上でテンプレート エンジンを使用する前に、ユース ケースを十分に検討することをお勧めします。

まず、PHP 自体はテンプレートに最適です。別のテンプレート エンジンを使用する唯一の正当な理由は、信頼できないユーザーにテンプレートの作成または編集を許可する場合です。そのため、プロジェクトにユーザーが編集可能なテンプレートがある場合は、Smarty を使用してください。そうでない場合は、PHP を使用してください。

問題がコードとレイアウトの分離である場合は、軽量の MVC スタイルの実行モデルの実装を検討することをお勧めします。または、もっと見下した言い方をすれば、テンプレートにさらに深いロジック コードがある場合は、おそらく何らかのリファクタリングを行うときです。

パフォーマンスは別の考慮事項です。はい、Smarty テンプレートのレンダリングにはコストがかかります。ただし、完了後は出力をキャッシュする必要があるため、実行時間が短縮されます。PHP テンプレートについても同様です。PHP では、出力バッファーを使用して、あらゆる種類の詳細なキャッシュ モデルを実装できます。ただし、時期尚早の最適化には注意してください。最適化は、コードが完成し、実際のボトルネックが何であるかを特定してから行ってください。

Smarty やその他のエンジンを使用する際の最大のコストは、開発者の時間です。これは複雑さの別の層であり、純粋な PHP 内でずっと達成できたことを、エンジンをだまして実行させなければならない状況に陥ることは避けられません。

于 2009-05-17T16:45:21.293 に答える
3

私はテンプレート エンジンが好きで、それらを使用する必要があると考えていますが、Smarty の特定のケースでは、テンプレート言語として PHP を大幅に改善するものではないため、時間の無駄だと思います。

  • 新しい構文は、ドキュメント内のランダムな場所に挿入される特別なタグの古い概念に基づいています。
  • Smarty は HTML の構文/構造を理解しないため、有効な/整形式の HTML を作成するのに役立ちません。Smarty のタグは HTML の構文に違反しているため、タグを追加すると、他の標準ツールも役に立ちません。
  • Smarty の出力は、PHP と同様に、デフォルトでは安全ではありません (エスケープされていません) 。HTML でデータを出力するすべての場所に追加することを忘れないでください。|escape

私が恋に落ちた特定の PHP テンプレート エンジンが 1 つあります。これは、これらすべての問題を解決します: PHPTALです。

これはまだ学ばなければならない新しいことであり、アプリケーションに依存するものですが、XSS と不正な形式の問題を解決することは、苦労する価値があると思います。

Smarty と同様に PHPTAL は、一度 PHP にコンパイルされてキャッシュされるため、パフォーマンスは生の PHP に匹敵します。

于 2009-05-17T16:41:41.200 に答える
2

長所

  • HTML ファイルに PHP を使用しない (PHP と HTML の両方の識別が可能)
  • パイプ {$var|default:"None selected"} {$var|urlencode}
  • Foreachelse: {foreach item=row from=$results}{$row.name}<br>{foreachelse}結果なし{/foreach}
  • テーマのあるウェブサイト/ページ (CSS だけでは限界があります)

短所

  • 他の言語の構文
  • コードが常に明白であるとは限らない {"Ymd"|strftime:$timestamp} {$array|@var_dump}
  • わずかなオーバーヘッド

「テンプレート」アプローチ (mVc) を強くお勧めしますが、Smarty とプレーンな PHP の両方で十分です。

于 2009-05-18T18:48:52.933 に答える
1

私の知る限り、Smarty はスピードに関して最高のテンプレート エンジンの 1 つです。たぶん、慣れるまで時間がかかります。しかし、システムだけで作業しているわけではなく、html ファイルとスタイル ファイルの量が膨大な場合は、開発が大幅にスピードアップします。

私の最後のプロジェクトに取り組んでいる間、デザインは数回変更されましたが、ロジックは同じでした. これは、Smarty やその他のテンプレート エンジンが大いに役立つ場合の最良の例だと思います。

于 2009-05-17T16:26:22.573 に答える
1

テンプレート エンジンとして Smarty を使用することは、ソフトウェアの余分なレイヤー、つまり別のテンプレート言語の上にあるテンプレート言語であるため、使用しない場合ほどパフォーマンスが良くない可能性があります。一方、キャッシュ機能を適切に使用すると、全体的なパフォーマンスが向上する可能性があります。

Smarty テンプレートは、ブラウザーに出力される前に事前にコンパイルされます。これには、一時ファイルがディスクに書き込まれます。この手順により、少なくともパフォーマンスが確実に低下します。

実装とプレゼンテーションを分離しておく能力に自信があり、サーバー側のキャッシュにあまり関心がない場合は、おそらく純粋な php テンプレートを使用する必要があります。Zend Frameworkなどの一部の MVC フレームワークには、PHP に似た独自のテンプレート システムがあります。

一方、smarty は、特に何がどこに属しているかが不明確な場合に、プレゼンテーションと実装をきちんと分離する適切な方法です。この必要な分離を強制することは、あなたを訓練するのに役立つかもしれません.

そうは言っても、私はほとんどの PHP プロジェクトで Smarty を使用しています。これは、私が非常に慣れていて気に入っている Java-Server Tag Libraries (JSTL) を思い出させるからです。

于 2009-05-17T16:20:15.973 に答える
1

個人的には、テンプレート作成に Blitz を使用しています。このサイトでは、著者はそれが最速のテンプレート エンジンであると主張し、PHP のさまざまなテンプレート システム間のパフォーマンスに関する (偏った?) グラフを提供しています。私自身は smarty を使用したことはありませんが、これにより、そのパフォーマンスに関するヒントが得られる可能性があります。

http://alexeyrybak.com/blitz/blitz_en.html

于 2009-05-17T16:37:28.393 に答える
0

Smarty を使用するかどうかは、多かれ少なかれ哲学的な立場です。

私はそれを使用しますが、多くの機能は使用しません。このように使用すると、テンプレートは非常に単純になる傾向があります。パラメータを含む連想配列を渡し、そのコンポーネントを反復処理して、必要な要素を結果ページに挿入します。これにより、テンプレートがクリーンに保たれ、(できれば) ビジネス ロジックがなくなります。

さらに、Smarty の拡張は非常に簡単です。

例として、スタイル パラメーターを fetch() に追加して、fetchUsingStyle() を作成しました。これにより、サイトのさまざまなレイアウトを簡単に切り替えることができます。

さらに、私の fetchUsingStyle() はさまざまな場所でテンプレートを検索します。まず、現在のスタイルを見つけようとします。見つからない場合は、デフォルトのスタイルを使用してテンプレートをロードしようとします。最後に、後で実装する何かのプレースホルダーである純粋な静的ダミー ファイルを見つけようとします。

于 2011-02-16T00:36:39.457 に答える
0

Codeigniter などの MVC パターンで Smarty を使用してみてください。コア PHP よりも優れています。

于 2012-10-09T12:27:12.210 に答える
-1

html ファイルを使用して、必要な場所に php コードを挿入できるのに、なぜテンプレート エンジンを使用するのでしょうか? あなたはPstttでこれを行うことができます! PHPのテンプレートエンジン

完全なソース コードはこちらhttp://github.com/givanz/psttt

于 2010-09-19T19:11:14.907 に答える