0

私はメインユーザーページのajaxリクエストに大きく依存しているプロジェクトに取り組んでいます。

現在のWebページには、それぞれのajaxリクエストがある「n」個の同じビューがあります。そのため、使用時にページが読み込まれると、同時に実行されるajaxリクエストの数は「n」個になります。

また、最初のリクエストが実行された後、他のリクエストがキャッシュからデータを収集するという別の設計上の問題があります。ワークフローは次のとおりです。

リクエスト:

  1. リクエストを送信
  2. キャッシュに必要な値があるかどうかを確認します
  3. 利用できない場合は、Webサーバーからデータを収集します(これには時間がかかります)
  4. データを収集し、「x」分の値をキャッシュに書き込みます。
  5. 値を返します。

したがって、最初に1つのリクエストだけを実行し、他のリクエストが最初のリクエストが終了するのを待つことができれば、キャッシュで利用可能なデータを使用できるようになり、パフォーマンスが大幅に向上します。

問題は、すべてのジョブを非同期で再生実行することです。そのため、これらのリクエストでは、最初のページの読み込み時にキャッシュ値が表示されません。

だから私がする必要があるのはこれです:

----Main ASYNC Thread------
-------first View Request----
-------second Request (it will run after the first one so it will read from the cache---
----- and so on...

では、どうすればリクエストをキューに入れることができますか、または他のリクエストを「待機」させることができますか?

私はこれのためにアプリケーションを設計するべきだったことを知っていますが、ページデザインとjavascriptデザインは外部ソースから来ました。だから私はそれらのことに取り組む時間がありません。

助けてくれてありがとう。

4

1 に答える 1

0

データ読み込みロジックを1つのメソッドにカプセル化すると、そのメソッドのすべてのスレッドを同期できます。AtomicBooleanフラグを使用します。

private final AtomicBoolean initialised = new AtomicBoolean(false);

public Data getData() {
   Data data = null;
   if (!initialised.get() && initialised.compareAndSet(false, true)) {
     cache.put(loadData());
   }
   while ((data = cache.get()) == null);
   return data;
}

アプローチの1つにすぎません。

于 2012-04-12T23:43:31.543 に答える