0

面白かったのでチェックしてみました。NewRequestサブスクライバーは各リクエストで 3 回 (または debug_toolbar が有効な場合は 7 回...) 呼び出されますが、サブBeforeRenderスクライバーは各リクエストで 1 回呼び出されます (debug_toolbar が有効な場合は > 30 回)。

したがって、イベントを介してmongodbをプロジェクトに接続したい場合、NewRequestリクエストごとに3回実行されます...

何故ですか?サーバーが各リクエストで同じジョブを 3 回実行する必要があるのはなぜですか?

前もって感謝します!!!

4

1 に答える 1

5

NewRequestPyramidは、リクエストごとに2回以上呼び出すことはありません。これが発生する唯一の理由は、誤ってサブスクライバーを複数回登録している場合です。複数回呼び出されると思われるもう1つの一般的な理由は、ブラウザは通常、ファビコンリクエストでリクエストを追跡しますが、2回の呼び出ししか考慮しないためです。サブスクライバーが実際に複数回呼び出されていることを私に納得させるために、出力を表示したり、問題を詳しく説明したりできますか?

BeforeRender複数回呼び出されます(レンダリングされたテンプレートごとに1回)。デバッグツールバーを有効にすると、リクエストごとに多くのものがレンダリングされますが、それでも30は私が期待するものの3倍のように聞こえます。

NewRequest一般に、サブスクライバーでデータベースに接続することはお勧めできません。そのサブスクライバーは静的リソース(文字通りすべての要求)に対しても呼び出されるためです。requestより良いパターンは、を介してオブジェクトにレイジー/リファイドプロパティを作成することconfig.set_request_propertyです。これにより、各リクエストでデータベースを初めて使用するときに接続され、使用しない場合でもパフォーマンスが低下することはありません。

于 2012-07-27T13:54:03.777 に答える