複数の同時要求の処理
非同期コードの記述
コストの高い処理をオフロードするには、Asynchronous JavaScript And XML (Ajax) を使用して、必要でないロジックを非同期コードブロックに移動します。たとえば、同期コードのみで作成されたページの場合、ユーザーがボタンをクリックし、長時間実行されるタスクが完了するまで待機した後、確認メッセージが表示されます。対照的に、長時間実行されるタスクをページでキューに登録して非同期で処理する場合、制御はすぐにユーザーに返されます。タスクの完了時にユーザーに通知するようにページを設定することができます。
<apex:actionPoller> を軽量にする
<apex:actionPoller> コンポーネントは、Ajax 要求を行うタイマーです。<apex:actionPoller> コンポーネントを使用するページでは、サーバーに対して連続要求を行います。ユーザーが長期間ページを開いたままにしたり、複数の取引先の詳細を取得する場合などに同じページで複数のウィンドウを開いたりすると、パフォーマンスが���下します。
パフォーマンスの低下を回避するには、<apex:actionPoller> からコールされる action メソッドで、DML、外部サービスコール、およびリソースを大量に消費する他の操作を実行しないようにします。繰り返しコールされる <apex:actionPoller> action メソッドの影響を十分に考慮します。広範囲にわたって配布されるページや継続的に有効なページでメソッドを使用すると、タスクがブロックされる可能性が高くなります。
ガバナ制限に達しないようにするには、Ajax 要求間の時間間隔を増やします。<apex:actionPoller> コンポーネントの interval 属性は、Ajax 更新要求間の時間間隔 (秒単位) の測定単位となります。この値は 5 秒以上である必要があります。指定されていない場合、デフォルトは 60 秒です。
<apex:actionPoller> コンポーネントは、コストの高い処理を必要としないページに適していますが、計算により多くのサーバー時間が必要なページの場合は、代わりに <apex:actionFunction> コンポーネントと JavaScript Remoting を組み合わせて使用することを検討してください。この代替方法では、より多くのコードが必要になりますが、柔軟性と効率性が向上します。