1

ASP.NET (MVC ではない) と .NET v4 (v4.5 ではない) を使用して Web アプリケーションを作成しています。

表示する必要があるデータの一部をサードパーティの Web サービスから取得していますが、そのメソッドの 1 つが完了するまでに長い時間 (数秒) かかります。フェッチ/プリフェッチされる情報は、ユーザーの最初の要求によって異なります (ユーザーごとに異なるオブジェクトの詳細を要求するため)。

シングルユーザーのデスクトップ アプリケーションでは、次のことが考えられます。

  • UI をできるだけ早く表示する
  • 非 UI バックグラウンド タスクで事前に情報をフェッチする
  • したがって、ユーザーが UI をドリルダウンして要求するまでに、データのフェッチ済みまたはキャッシュ済みのバージョンがあることを願っています。

ASP.NET を使用して同様のことを行うには、次のことができると思います。

  • BackgroundWorker を使用し、Session インスタンスをパラメータとしてワーカーに渡します
  • ワーカーのタスクが完了すると、取得したデータをセッションに書き込みます
  • タスクが完了する前にユーザーのデータ要求が到着した場合は、タスクが完了するまでブロックします

問題を予測できますか、改善を提案できますか?

[ASP.NET とバックグラウンド タスクに関する StackOverflow に関する他の質問がありますが、これらはすべて、セッション固有のデータではなく、グローバル アプリケーション データのフェッチと更新に関するものであるようです。]

4

1 に答える 1

1

デスクトップ アプリケーションと同じ規律を使用しない理由:

  1. サービスからのデータなしでページをロードします ( = Display my UI as quickly as possible)
  2. ajax 呼び出しを使用してサービス データをフェッチする (= Have a non-UI background task to fetch the information in advance)
  3. これは実際には同じですが、まだ進行中であることを示すアニメーション GIF を表示できます... ( Therefore hope have an already-fetched/cached version of the data, by the time the user drills down into the UI to request it)

サンプル コードを投稿するには、jquery を使用しているかどうかを知っておくと役立ちますか? プレーンなJavaScript?他の何か?JavaScriptがありませんか?

編集
これがあなたの計画であったかどうかはわかりませんが、別のアイデアは、サーバー側でもデータをフェッチし、将来のリクエストのためにデータをキャッシュすることです.
この場合、ステージは次のようになります。

  1. リクエストを取得します。
  2. サービスデータはキャッシュされていますか?
    2.a. はい?完全なデータを含む投稿ページ。
    2.b. 番号?サービス データのない投稿ページ。
    2.bi サーバー側でサービス データをフェッチし、将来のリクエストのためにキャッシュします。
    2.b.ii. クライアント側でサービス データをフェッチし、現在のセッション用にキャッシュします。

編集2:
この規律の欠点は、データを取得する方法が変更された場合、サーバー側とクライアント側の両方で変更することを忘れないでください。

于 2013-08-19T12:12:22.727 に答える