Visualforceページの性能改善について、以下のことをまとめました。
-
SOQLについて、以下のことを注意しましょう。
1. 計算処理(例:加算など)の実装優先順位:SOQL>Apex
2. データのフィルター処理の実装優先順位:SOQL>Apex>Visualforce
3. ループ内にDMLを発行しないこと。 -
データサイズについて、以下の方法でデータサイズをコントロールしましょう。
1. フィルターの活用:SOQLにフィルター条件を追加することでデータを絞ることができる。
2. 「sharing」キーワードの活用:Apexコントローラクラスに「sharing」キーワードを追加することで、該当ユーザの権限によるデータのみアクセスできる。アクセス権限がないデータがフィルターできる。
3. ページングの活用:StandardSetControllerを継承して、ページングタグを利用することで、一回ロードされるデータが制御できる -
Visualforceページ内のロジックを減らしましょう。
Visualforceページ内に複雑なロジックがある場合、有効なGETTERメソッドを活用して、その分のロジックをApex側に移動すること。 -
Lazy Loadingを活用しましょう
大きい画面に対し、全画面のリフレッシュより、非同期処理を利用して、画面の一部のみ更新すること。 -
ビューステートの最適化
1. 継続的に利用しないプロパティに対し、「transient」キーワードを宣言することで、ページのビューステートには含まれないから、ビューステートのサイズが縮小される。要求中に何度も再計算するには非常に大きなシステムリソースを使用する。
※例:画面から渡される画像情報を格納する変数がtransientで宣言する。
2. ビューステートの利用について、基本的にApexコントローラクラスに検索されるデータですので、SOQLになるべく明確な検索条件を追加して、ビューステートのサイズが縮小される。
3. 大量データを画面に表示される場合、ページングを利用して、1回ロードされるデータ量を減らしてビューステートのサイズが縮小される。
4. 1つのページに複数のFORMを利用するより、<Apex:actionRegion>利用すること。
<apex:actionRegion>コンポーネントは要求時にサーバが処理するコンポーネントのみを定義する。要求が完了したときに再表示されるページの領域は定義しない。
※<Apex:actionRegion>の参照リンク
最後に、以下のリンクにVisualforceの最適化について、詳しく紹介されるので、ご参照。
Visualforce のパフォーマンスを最適化するベストプラクティス