7

私が理解している限り、アプリケーションで有効になっているすべてのモジュールは、リクエストごとにロードされます ( zf2-lazy-loading-moduleZF2モジュールによって提供されるような最適化方法を使用しない限り)。私は公開されるモジュールに注目しており、電話番号を英国形式にフォーマットすることを目的とするAkrabatFormatUkTelephoneモジュールなど、機能が非常に制限されたモジュールに出くわしました。modules.zendframework.org

開発は、(多くのことを行うがあまり良い方法ではないモジュールではなく) 1 つのことを行うのが得意な単一目的のモジュールの作成に集中する必要があることは理解していますが、次のような限られた機能を提供するモジュールの使用を開始することを考えています。前述のとおり、パフォーマンスに悪影響を与える可能性のあるリッチなアプリケーションを構築するには、何百ものモジュールを組み合わせる必要があります。代わりに、この種の機能をクラス (例: Zend\I18n?) に配置し、オンデマンドでロードして、より最適化することを期待します。しかし、Akrabat の評判を知っていると、何かが足りないのではないかと考えているので、質問します。

私が言及したようなモジュールのロードは、PHP クラスを介して同じ機能をロードするよりもパフォーマンスが大幅に悪いのでしょうか (または、ZF2 の設計方法が原因で似ているのでしょうか)? モジュールとクラスのローディングのパフォーマンスに関する数値はありますか (つまり、5%、10%、15% 遅くなります)。

4

4 に答える 4

3

このコメントを最終的な回答として受け取らないでください。ZF2 開発者の誰かがそれについてさらに洞察を与えることを願っていますがModule.php、通常module.config.phpはアクティブにロードされるだけです。他のすべては単に登録され、オンデマンドで呼び出されます。したがって、Module.php と module.config.php のファイルサイズが大きすぎない限り、パフォーマンスはそれほど大きな問題にはなりません。

Akrabats の例の場合、起こっているのは、新しい ViewHelper のレジストリだけです。他には何もありません。Zend 内の他のすべてのビュー ヘルパーと同じです。これらの場合、パフォーマンスはそれほど重要ではありません。

個人的には、Webspace で Skeleton を 80 ミリ秒でロードし、BjyAuthorize、ZfcBase、ZfcUser、および私自身のモジュールを使用すると、ロード時間は 100 ミリ秒まで増加しました。そして、これはメモリキャッシュが有効になっていない状態です!

于 2012-12-17T18:31:47.227 に答える
0

サムが指摘したように、モジュールをロードすることは、クラスをロードすることと大差ありません。モジュールから何も使用せず、正しいことを行う限り、それは登録されているだけです。

では、「正しく行う」とはどういう意味でしょうか。

モジュール クラスの bootstrap() メソッド内に大きなナンセンス ループを入れてみてください。これにより、アプリケーションのすべてのリクエストが遅くなることがわかります。これは、モジュールのブートストラップ メソッドがすべてのリクエストで呼び出され、軽量のタスクに対してのみ非常に慎重に使用する必要があるためです。通常、bootstrap() メソッドを使用する目的では、アプリの速度が 1 ミリ秒も低下することはありませんが、このメソッドでファイルをディスクに書き込むと、各リクエストでアプリの速度が数秒間低下する可能性があります。

アプリが非常に重くなる場合は、可能な限り classmap_autoloader とキャッシュを使用する必要があります。「正しいこと」を行った場合、アプリに多くのモジュールまたは多くのクラスがあるという理由だけで、パフォーマンスの問題は発生しません。すべてはアルゴリズムにかかっていると言えます。

あなたが言及したようなベストプラクティスを使い続けてください。通常、これらはアプリケーションのボトルネックではありませんが、独自のアルゴリズムと障害が原因です。

編集: コミュニティのモジュールを使用している場合は、常にパフォーマンスの問題を確認する必要があります。非常に軽量に見えるモジュールでも、アルゴリズムが悪い場合、アプリケーションのボトルネックになる可能性があります。ただし、追加のモジュールをロードしている場合は、それが重要ではありません。

于 2015-02-02T20:15:21.303 に答える
0

MVC コンポーネントの観点からは、モジュールはまったくありません。すべてのモジュールの構成をマージした結果、1 つの大きな構成ファイルがあります。モジュールにonBootstrapメソッドがないか、あまり機能しない場合を除き、モジュールの読み込みは、モジュールnew Moduleのすべてを呼び出すのと同じくらい高速であり、痛みがなく、メモリも安価です。

前述の構成マージ手順は、デフォルトで有効になっている DEV モードでのみ発生します。

次のように、ZF2 アプリケーションを高速化するためのトリックもいくつかあります。

  1. マージされた構成キャッシュを有効にする

  2. EdpSuperluminal モジュールを使用する

  3. 配列ではなくアクションから ViewModel オブジェクトを返す

  4. ViewModel でテンプレート名を明示的に設定する

  5. テンプレート パス スタックだけではなく、テンプレート マップを使用する

  6. 構成でのルートの順序が重要です! LIFO キュー (後入れ先出し) です。

  7. コンソール モジュールを HTTP コンテキストで読み込まないようにしてください。

  8. ZF2ではなくComposerにオートロードを行わせる

... もっと。ZF2 アプリのパフォーマンスについて、Gary Hockinによる非常に良い話があります。

認証モジュールは確実にアプリの速度を低下させます。内部では多くのことが行われています: ユーザーの ID を (データベースから?) 取得する必要があり、ユーザーはルールに対して認証される必要があります。確かに memcached などを使用して速度を上げることができますが、これには ZF2 アプリケーションのライフサイクル、使用するモジュールなどについてある程度の知識が必要です。

また、Zend Framework 3 が間もなくリリースされる予定です。一部の機能は高速化されますが、あまり期待しないでください。多くのオーバーヘッドは、ZF2 に関する知識が不足しているためです。問題ありません。

于 2016-03-24T21:06:22.023 に答える