Skip to main content

 

 

 

 

Template:OutSystems/Documentation_KB/Breadcrumb_New_Layout

 

 

Template:OutSystems/OSLanguageSwitcher

 

 

 

OutSystems

スコープ情報を乱用しない

画面のローカル変数と、Preparationのクエリやアクションの結果は、画面全体のスコープですべて保持されます。そのため、これらはPreparation、画面、画面アクションで参照することができます。

影響 - ViewStateを検討する

画面のスコープは便利ですが、画面アクション内では慎重に使用する必要があります。

画面アクションの実行は、ローカル変数やPreparationデータが生成された最初のリクエストではなく、別のWebサーバーへのリクエストの結果であることに留意してください。

すべての画面アクションで必要な情報のスコープはViewState内に配置され、リクエストに応じてやりとりされます。ViewStateは画面ごとに固有であるため、データが1つの画面アクションでのみ必要な場合でも、すべての画面アクションに渡されることになります。その情報を必要とする画面アクションが実行されないために、ViewState内に保持された情報が一切使用されないこともあります。

結果として、画面アクションでスコープ情報を使用するとViewStateが大きくなり、サーバーとブラウザの間のネットワークトラフィックが増加します。このため、Ajaxの速度が低下したり、ページ読み込みのパフォーマンスが低下したりするおそれがあります。

ベストプラクティス

ViewStateの増加を制限するため、画面アクション内でスコープの大きなデータを参照しないようにします。小さな型(IntegerやId)のローカル変数やPreparationの結果は許容範囲内ですが、ストラクチャ、レコードリスト、サイズの大きなテキストは参照しないようにしてください。

代わりに次のようにします。

  • クエリを再読み込みしてアクションを再実行する - クエリやアクションの呼び出しを減らすためにPreparationの結果を再利用し、ViewStateで大きい情報がやりとりされるというデメリットが生じるよりも、サーバー側での処理を繰り返すほうが適切です。
  • 画面アクションのパラメータで情報を渡す - 画面アクションでのみ使用する情報がある場合、その情報をスコープで参照する代わりにパラメータで渡すと、ViewStateで他の画面アクションに渡さずにすみます。

画面アクション内で最小限のコンテキストを渡してクエリを再実行する場合やアクションを実行する場合も、パラメータを使用するとすっきりします。たとえば、TableRecord.List.Current.Customer.Idを画面アクション内で参照する代わりにパラメータで渡すなどです(画面アクション内で参照すると、TableRecord.List全体がViewstate内に保持されます)。

  • Was this article helpful?