2

私は多くのフレームワークが PHP で DI を実装しているのを見てきました。ただし、php のすべてのオブジェクトは、単一のリクエストの存続期間中に作成および破棄されるため、これがパフォーマンスにどのように影響するのか疑問に思います。

一般に、DI コンテナー内に多数のオブジェクトを定義します。PHP では、Controller がこれらのオブジェクトのほとんどを必要としない場合でも、それらはインスタンス化されます。また、DI の依存関係を php ファイルで宣言すると、参照されているすべてのスクリプトが読み込まれます。DI がなければ、必要なものだけをロードします。

一部のフレームワークで遅延 DI が許可されているのを見たことがあります。これは、不要なインスタンス化に役立つはずです。DI をセグメント化することも、最初の問題に対処する方法の 1 つかもしれません。では、DI は私の php アプリケーションのパフォーマンスに悪影響を及ぼしますか? また、それが起こらないように DI を php に実装するにはどうすればよいですか?

4

2 に答える 2

0

一般に、DI コンテナー内に多数のオブジェクトを定義します。PHP では、Controller がこれらのオブジェクトのほとんどを必要としない場合でも、それらはインスタンス化されます。

まあ、遅延初期化もあるので、これらのオブジェクトは軽量のプレースホルダーにすぎず、機能が必要な場合に備えて、大きなオブジェクトは必要なときにのみ作成されます。

では、DI は私の php アプリケーションのパフォーマンスに悪影響を及ぼしますか? また、それが起こらないように DI を php に実装するにはどうすればよいですか?

コードのすべての行がアプリケーションのパフォーマンスに影響を与えるため、何をするにしてもそれに対処する必要があります。パフォーマンスが本当に気になる場合は、必要でない限りコードをロードする必要がないように、アプリケーションの出力をキャッシュすることから始める必要があります。

于 2012-04-12T18:44:07.127 に答える
0

問題があるかどうかを特定し、次に何が問題なのかを特定する必要があります。

  • ビルドに多くのリソースと時間がかかる依存関係がありますか?

次のような遅延注入を使用できます。

class Class1 {
    /**
     * @Inject(lazy=true)
     * @var Class2
     */
    private $class2;

    public function doSomething() {
        // The dependency is loaded NOW
        return $this->class2->getSomethingElse();
    }

( PHP-DI の例)

  • クラスの依存関係が多すぎませんか?

依存性注入が本当に問題なのか自問する必要があります。DI を使用する代わりに新しいインスタンスを作成する (またはシングルトンを使用する) 場合、問題は解決しますか? (私はそうは思わない)

IMO パフォーマンスの考慮事項には、DI が問題であることを明確に示す必要があります。アプリケーションで問題が発生する可能性がある部分は非常に多くあります。

于 2012-10-07T09:40:30.223 に答える