JVM の新機能であるEDIT
RTFM は、サーブレット コンテナー (この場合は Jetty) が要求ごとに新しいサーブレット インスタンスを作成するという誤った仮定を作成しました。完全に間違っています。
したがって、以下の質問は議論の余地があり、上記は、遅延値が実際に「永遠に」(または遅延値が定義されているインスタンスが存在し続ける限り) であるという事実を確認しています。
オリジナル 私が今理解しているように、基本的なサーブレット環境では、HttpRequest ごとに白紙の状態から始めます。
これは、各リクエストで遅延 val オーバーヘッドが新たに発生することを意味します。
私が懸念している特定の問題は、(lazy val による) データベース クエリ ステートメントのキャッシングと、これが不必要なパフォーマンスの低下を招くかどうかです。つまり、アプリケーション サーバー上でクエリ ステートメントをキャッシュするポイントは何ですか?
はい、接続プーリングを使用すると、リクエストのスコープに関係なくクエリステートメントをキャッシュできます。これは大きなプラスです。ただし、それでは、リクエストごとに ORM/JDBC-Wrapper が、キャッシュされているかどうかにかかわらず、クエリステートメントを生成するという比較的コストのかかる操作を実行するという問題は解決しません。
問題は、サーブレット環境では、クエリ キャッシングは助けになるよりも邪魔になるということです。(Lazy val を介してクエリをキャッシュする ScalaQuery を使用しています)
利点があると思われる唯一のケースは、同じリクエストで特定のクエリを複数回呼び出す場合ですが、これは私がめったに行うことではありません (ほとんどの場合、Foo または List[Foo] のクエリを1 回ごとに 1 回実行するだけです)。リクエスト)