ビューステートの最適化
Visualforce ページのビューステートを維持するために、Lightning Platform プラットフォームは、コンポーネントの状態、項目値、およびコントローラーを非表示のフォーム要素に暗号化文字列として格納します。ビューステートには 170KB の制限があります。ビューステートが大きいと、各要求に必要な処理時間 (シリアライゼーションとデシリアライゼーションの時間、暗号化と復号化の時間などを含む) が長くなります。ビューステートのサイズを縮小すると、ページをより迅速に読み込むことができ、ページの停止頻度が少なくなります。
Visualforce ページのビューステートを調べるには、「開発モード」および「開発モードでビューステートを表示」ユーザー権限を設定します。開発モードフッターの [View State (ビューステート)] タブには、ビューステートの分布が表示されます。各ページのビューステートサイズを把握し、大量のデータでテストして、リリース後に発生する可能性がある問題を回避します。
ビューステートを削減する方法は、次のとおりです。
- 絞り込みやページネーションを使用して、状態を必要とするデータを減らす。
- インスタンス変数が現在の要求にのみ役立つ場合は、transient キーワードを使用してそのインスタンス変数を宣言する。transient 変数はビューステートに含まれません。
- Visualforce ページに関連するデータのみを返すように SOQL コールを調整する。
- ページで使用されているコンポーネントの数を減らす。
- データを参照のみにする。<apex:inputField> コンポーネントの代わりに <apex:outputText> コンポーネントを使用する。
- JavaScript Remoting を使用する。<apex:actionFunction> コンポーネントとは異なり、JavaScript Remoting では <apex:form> コンポーネントは必要ありません。JavaScript Remoting でページのビューステート全体を削減することはできませんが、多くの場合、ビューステートを転送、シリアライズ、およびデシリアライズすることなくページのパフォーマンスを向上させることができます。このトレードオフとして、reRender 属性を失い、コールバックを処理する追加の JavaScript コードが必要になります。