0

我正在开发一个严重依赖主用户页面上的 ajax 请求的项目。

在当前网页中,我有“n”个相同的视图,每个视图都有 ajax 请求。所以当使用加载页面时,有“n”个ajax请求同时运行。

还有另一个设计问题是,在第一个请求运行后,其他请求将从缓存中收集数据。工作流程如下:

要求:

  1. 发送请求
  2. 检查缓存是否具有所需的值
  3. 如果不可用,则从网络服务器收集数据(这需要一些时间)
  4. 收集数据,将“x”分钟的值写入缓存。
  5. 返回值。

因此,如果我能设法在开始时只运行一个请求并让其他请求等待第一个请求完成,他们将能够使用缓存上的可用数据,这将大大提高性能。

问题是异步运行所有作业,因此这些请求在第一页加载时不会看到缓存值。

所以我需要做的是:

----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

如果您将数据加载逻辑封装在一种方法中,则可以同步该方法中的所有线程,例如。使用 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;
}

只是其中一种方法。

于 2012-04-12T23:43:31.543 回答