Smarty は、私が PHP 言語に触れたときに使用した最初のオープンソース フレームワークと言えます。当時、Smarty の助けを借りて、プロジェクトの開発を非常にうまく完了し、次の手順に従いました。 MVC モデルは非常に優れています。しかしその後、多くの人が Smarty のことはよく知っているものの、使いたがらないことが徐々にわかってきました。考えられる理由は次のとおりです。遅い。
私は最初、Smarty は魔法だと思っていましたが、後で PHP を通じて実装されていることを知りました。その後、他の人が Smarty を使用するとパフォーマンスに影響を与えると報告したため、そのソース コードを詳しく調べて、実際にどのように実装されているかを確認したいと思いました。
実際、Smarty は PHP を使用して中間層を作成し、カスタマイズされたテンプレート タグを PHP 言語に変換するだけです。これには、構文ツリー モードと PHP コードの自動生成が含まれます。ただし、これはコンピュータの技術です。中間層を介してあらゆる問題を解決できますが、パフォーマンスの問題も発生します。したがって、パフォーマンスに影響を与えるのはこの中間層です。しかし同時に、Smarty はキャッシュを通じてこのギャップを埋めるために懸命に取り組んでいます。ただし、プロジェクトを適切に階層化し、フロントエンドとバックエンドを分離するには、開発実践において Smarty が適切な役割を果たします。そのためには、プロジェクトが人件費とサーバー コストの間でトレードオフを行う必要があります。
Smarty は外部的には非常に優れたパフォーマンスを発揮しますが、私の個人的な意見では、Smarty 内部の構造とコード レベルは少し乱雑です。以下は UML 構造図の一部であり、その他も追加されます。
同様に、当時リアルタイムで記録できなかったため、いくつかの主要なクラスを以下に示します:
Smarty_Internal_CompileBase (ループ、代入、割り込みなどのコンパイルされたタグ) .)
Smarty_CacheResource (キー値キャッシュ、カスタム キャッシュなどのキャッシュ、ここに参照キャッシュがあるはずです)
_smarty_parsetree (テキスト、タグ、コードなどを含む構文ツリー パーサー)
Smarty_Template_Source、Smarty_Resource (さまざまなリソース: コード、ファイルのインクルード、文字列、コンパイル/非コンパイル)
テンプレート解析を実装するために中間層が追加されます。これはパフォーマンスに影響しますが、人間化された開発を適切にサポートします。 。さらに重要なことは、テンプレート エンジンの概念は他の多くのフレームワークにも見られることです。 Smarty が遅い、またはプロジェクトの要件を満たしていないと思われる場合は、一連のテンプレート エンジン ルール解析を自分で実装できます。たとえば、ThinkPHP はテンプレートをサポートしています。詳細については、http://doc.thinkphp.cn/manual/view.html を参照してください。
ここでは、より深い変換、つまり構文ツリー モードの使用が可能であり、これにはドメイン固有言語 DSL が関与する必要があります (詳細については、本書「ドメイン固有言語」を参照してください)。その機能は、私たちが使い慣れた言語を通じていくつかの難しいことを達成することです。たとえば、フロントエンド HTML 開発者にとって PHP 言語を使用してデータを出力するのは面倒だと考えているため、フロントエンド HTML 開発者が使用できるように に似たタグを提供しています。
さらに一歩進んで、たとえば、私たち (PHP 開発者) が C/C++ で PHP 拡張機能を開発するのが苦痛または非常に難しいと感じている場合、zephir を使用して拡張機能を作成できます。
zephir について少し話しましょう。 Zephir は、halcon (palcon オープンソース フレームワークについては後ほど説明します。これは非常に優れたオープンソース フレームワークであると言わざるを得ません!) チームによって提供される言語です。 PHP 拡張機能の開発に使用できます。公式ドキュメントについては、http://zephir-lang.com/index.html を参照してください。その仕組みも、独自のパーサーを通じてzephirコードをCコードに変換することで、PHP拡張機能の開発を実現します。
以前、zephir を体験してみたのですが、なかなかいい感じでした。 以下はその時に試した例です。 【Zephir 開発実践】Zephir で PHP 拡張機能を書く実践 http://my.oschina.net/ u/256338/blog/ 284540