symfony2 の遅延サービスについて質問があります。いつ遅延サービスを使用する必要があり、どのような場合に回避する必要がありますか? 遅延サービスを使用すると、オーバーヘッドは発生しますか?
1 に答える
ドキュメントから:
場合によっては、インスタンス化するのが少し重いが、オブジェクト内で常に使用されるとは限らないサービスを注入したい場合があります。たとえば、NewsletterManager があり、それにメーラー サービスを挿入するとします。実際にメーラーを使用する NewsletterManager のメソッドはわずかですが、必要がない場合でも、NewsletterManager を構築するためにメーラー サービスが常にインスタンス化されます。
遅延サービスを構成することは、これに対する 1 つの答えです。レイジー サービスでは、メーラー サービスの「プロキシ」が実際に注入されます。何らかの方法でプロキシと対話するまで、メーラーは実際にはインスタンス化されないことを除いて、メーラーと同じように見え、機能します。
はい、多少のオーバーヘッドがあります。しかし、それは最小限です。必要のない場合は、遅延サービスの使用を避ける必要があります。(そのように簡単)。
例:
サービス A に 3 つのメソッドがあり、B と C に依存している場合。B が 3 つのメソッドすべてで使用され、C i が 1 つのメソッドでのみ使用されていることがわかっている場合は、C を遅延として宣言することを検討できます。C が重いサービスの場合は、lazy であると宣言する必要があります。この例では、 B を遅延として宣言しても何のメリットもありません...だからやめてください... =)