クライアント状態の保存がオンになっており、ViewScoped Bean を使用している場合、ViewScoped Bean はページにシリアル化されていますか、それとも、ページにシリアル化されたトークン/キーを使用してセッションに保存されていますか?
Mojarra 2.x は、ビュー スコープ Bean を HTTP セッションに格納します。セッションでデフォルトで最大 25 個のビュー スコープ Bean を持つ文書化されていない設定があります。issue 4015も参照してください。つまり、物理的なビュー スコープの Bean インスタンスが JSF ビュー ステートに格納されることはありません。これらは、JSF ビューステートに保存される UUID によってのみ参照されます。そのため、クライアント/サーバー状態の保存方法に関係なく、JSF ビュー状態ではシリアライズされません。
ここで懸念されるのは、シリアル化されている場合、ViewScoped Bean がページにシリアル化され、ネットワーク上を行き来するため、ViewScoped Bean に大きなインスタンス変数を保存しないことを心配する必要があることです。
これは正当な懸念事項です。たとえそれが真実であったとしても、私たちはかなり極端なケースについて話している. 10 個の平均的なプロパティを持つ 100 個の平均的なエンティティのコレクションは、ビュー ステートのサイズで既に最大 5KB を超えることはありません。ウェブサーバーで gzip 圧縮を有効にすることで、多くの帯域幅を取り戻すことができることに注意してください。テキストベースのリソースごとに最大 70% までです。
ただし、大きなデータを扱っている場合は、HTTP セッションのストレージ サイズが問題になる可能性があります。JSF 2.2 メモリ消費も参照してください。Mojarra は、メモリ内の最後の 25 ビューの ViewScoped Bean を保持するのはなぜですか? 理想的には、ビュー スコープ Bean は、参照しているページが GET ナビゲーションまたはブラウザー タブのクローズによってアンロードされるとすぐに破棄される必要があります。デフォルトの JSF ビュー スコープ Bean はそれを行いません。別のビューへのポストバック中、またはセッションの有効期限が切れたときにのみ破棄されます。
バージョン 2.2 以降、JSF ユーティリティ ライブラリOmniFacesを使用した場合@org.omnifaces.cdi.ViewScoped
、アンロード中の破棄がサポートされます。これは、HTTP セッションのストレージ サイズにプラスの影響を与えるはずです。