我遇到了一个问题,在大多数情况下(主要是使用 FireFox),在 onModuleLoad 事件中完成的请求没有被缓存。我检查了 FireBug 上的网络控制台,它几乎总是显示那些从服务器而不是从缓存中获取的请求。
我准备了一个测试用例,你可以在http://tradeosam.appspot.com/查看
这是 onModuleLoad 实现:
public void onModuleLoad() {
RequestBuilder request = new RequestBuilder(RequestBuilder.GET,
"query/test?v=1-8951245");
try {
request.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
}
@Override
public void onError(Request request, Throwable exception) {
}
});
} catch (RequestException e) {
}
new Timer() {
@Override
public void run() {
RequestBuilder request = new RequestBuilder(RequestBuilder.GET,
"query/test?v=1-23478.34");
try {
request.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
}
@Override
public void onError(Request request, Throwable exception) {
}
});
} catch (RequestException e) {
}
}
}.schedule(1000);
}
从代码中可以看出,我在ModuleLoad上做了两个请求,第一个是直接完成的,几乎从不被浏览器缓存。第二个是在 1 秒后使用计时器完成的,并且缓存没有问题。这两个请求具有相同的标头,并转到相同的 Servlet,唯一的区别是用于区分两者的“v”参数。