この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

Visualforce のパフォーマンス向上のためのベストプラクティス

Visualforce は、標準の Salesforce ページの機能、動作およびパフォーマンスに合わせる機能を開発者に提供するために設計されました。遅延、予期しない動作や、その他の問題 (特に Visualforce に関するもの) がある場合は、いくつかの対処法を実行することにより、操作性を改善できるだけでなく、コーディングの改善にも役立てることができます。

まず、次を確認して、Visualforce に問題があるかどうかを特定します。
  • 予測される Visualforce の機能を他のマシンや他のブラウザを使用してテストし、その問題が 1 台のユーザのコンピュータに限らないことを確認する。
  • 他の Salesforce ページの読み込み時間を確認して、読み込みに時間がかかることがネットワーク上の問題ではないことを確認する。他のページの読み込みにも時間がかかる場合は、Salesforce における帯域幅や待ち時間の問題が原因である可能性があります。Salesforce サーバの状況を確認するには、trust.salesforce.comを参照してください。また、ネットワーク接続の状況をチェックして、適切に機能しているかどうかを確認する必要があります。
  • JavaScript および CSS の縮小、Web 画像の最適化、できる限り iframe の使用を避けるなど、一般的な Web 設計のベストプラクティスに従っていることを確認する。
  • 開発者コンソールを使用して、要求をステップごとに実行し、要求内のどの項目がシステムリソースを最も消費したかを調べる。Salesforce オンラインヘルプの「開発者コンソールの使用」を参照してください。
次のリストは、よく発生する Visualforce のパフォーマンス上の問題と解決策を示したものです。
ビューステートのサイズ
Visualforce ページのビューステートのサイズは、135 KB 未満である必要があります。ビューステートのサイズを縮小することにより、ページをより迅速に読み込み、表示が停止する頻度を削減します。
開発モードフッターの [ビューステート] タブを使用し、次の対処法を実行すると、ビューステートのパフォーマンスを監視できます。
  • 状態の維持に不可欠ではなく、ページの更新時にも不要な変数には、Apex コントローラで transient キーワードを使用する。
  • ビューステートの大部分をコントローラまたはコントローラ拡張で使用されているオブジェクトから取得していることが分かった場合は、Visualforce ページに関連するデータのみを戻すように SOQL コールの絞り込みを検討する。
  • ビューステートが大規模なコンポーネントツリーの影響を受けている場合は、ページが依存しているコンポーネント数の削減を試みる。
読み込み時間
サイズが大きいページは読み込み時間に直接影響します。Visualforce ページの読み込み時間を改善するには、次の対処法を実行します。
  • アイコンの画像など頻繁にアクセスするデータをキャッシュする。
  • Apex コントローラの getter メソッドで SOQL クエリを使用しない。
  • 次の対処法を実行して、ページ上に表示するレコード件数を削減する。
  • Apex オブジェクトを遅延読み込みして要求時間を削減する。
  • <apex:includeScript> タグ外に JavaScript を移動し、<apex:page> 終了タグのすぐ前の <script> タグに配置することを検討する。<apex:includeScript> タグは、JavaScript を閉じ要素 <head> のすぐ前に配置します。つまり、Visualforce ではページ上のその他のコンテンツの前に JavaScript が読み込まれます。ただし、ページにマイナスの影響を及ぼさない確信がある場合は、JavaScript をページ最下部に移動するだけにしてください。たとえば、document.write またはイベントハンドラを必要とする JavaScript コードスニペットは、<head> 要素に配置したままにする必要があります。
どの場合でも、Visualforce ページは 15 MB 未満である必要があります。
複数の同時要求
同時要求は他の保留中のタスクをブロックする可能性のある実行に長時間かかるタスクです。これらの遅延を短縮する対処法は、次のとおりです。
  • <apex:actionPoller> で使用する action メソッドを軽量にする。これは、<apex:actionPoller> からコールされる action メソッドで、DML の実行、外部サービスコール、およびリソースを大量に消費する他の操作を回避するためのベストプラクティスです。指定した間隔で <apex:actionPoller> から繰り返しコールされる action メソッドの影響を考慮します。特に、広範囲にわたって配布されたり、継続的に開かれたりするページで使用する場合には注意が必要です。
  • Visualforce ページから Apex をコールする間隔を延長する。たとえば、<apex:actionPoller> コンポーネントの使用時は、interval 属性を 15 ではなく 30 秒に調整します。
  • Ajax を使用して不要なロジックを非同期コードブロックに移動する。
クエリおよびセキュリティ
Apex コントローラの作成時に with sharing キーワードを使用して 1 人のユーザのデータセットを表示するだけで、SOQL クエリを向上できる可���性があります。
ページに項目値をすべて表示する
ページに大きなテキストエリア項目など多くの項目があり、他のエンティティとの主従関係がある場合、Visualforce ページに返されるデータのサイズに関する制限およびバッチ制限のためデータをすべて表示できないことがあります。ページには、次の警告が表示されます。「You requested too many fields to display. Consider removing some to prevent field values from being dropped from the display. (要求した項目が多すぎて表示できません。項目値をすべて表示するには項目値の一部を削除することを検討してください。)」
ページに項目値をすべて表示するには、一部の項目を削除して返されるデータ量を削減します。または、コントローラ拡張を独自に作成して、関連リストに表示される子レコードをクエリします。