GWT中的客户端缓存

时间:2010-03-02 11:05:48

标签: java gwt caching

我们有一个gwt-client,可以从我们的服务器收到大量数据。从逻辑上讲,我想在客户端缓存数据,使服务器免于不必要的请求。

截至今天,我已经让我的模型处理数据缓存,而这些数据的扩展性不是很好。这也成为一个问题,因为我们团队中的不同开发人员开发了自己的“缓存”功能,这使得项目充满了重复。

我正在考虑如何实现一个“单一入口点”,它可以处理所有缓存,让模型对如何处理缓存毫无头绪。

有没有人在GWT中有客户端缓存的经验?是否有可以实施的标准方法?

5 个答案:

答案 0 :(得分:10)

我建议你研究gwt-presenterCachingDispatchAsync。它为执行远程命令提供了单一入口点,因此是一个完美的缓存机会。

A recent blog post概述了一种可能的方法。

答案 1 :(得分:6)

你可能想看看命令模式; Ray Ryan在Google IO上就GWT的最佳实践进行了一次演讲,以下是成绩单:http://extgwt-mvp4g-gae.blogspot.com/2009/10/gwt-app-architecture-best-practices.html

他建议使用Action和Response / Result对象来使用命令模式,这些对象被抛入和退出服务代理。这些是封装您要在客户端上执行的任何缓存的优秀对象。

这里有一段摘录:“我有一个很好的货币单位来实现缓存策略。可能每当我看到两次相同的GET请求时,我会缓存上次得到的响应并将其返回给自己马上。不要为服务器端旅行而烦恼。“

在一个相当大的项目中,我采取了另一个方向。我开发了一个DtoCache对象,它基本上保存了对每个AsyncCallback的引用,这些AsyncCallback期望来自等待队列中的服务调用的响应。一旦DtoCache从服务器接收到对象,它们就被缓存在DtoCache中。此后,缓存的结果将返回到同一服务调用的所有排队和新创建的AsyncCallback。

答案 2 :(得分:1)

对于已经完全构建的,非常复杂的CRUD操作缓存引擎,请考虑Smart GWT。此示例演示了自适应地执行客户端操作的能力(当缓存允许时),同时仍支持对大型数据集的分页:

http://www.smartclient.com/smartgwt/showcase/#grid_adaptive_filter_featured_category

如果您需要将自己的小部件放在其上,则会通过ResultSet类公开此行为:

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/ResultSet.html

答案 3 :(得分:1)

有两种级别的缓存:

  • 在一次浏览器会话期间进行缓存。
  • 缓存跨浏览器会话,例如,重新启动浏览器后,缓存数据应该可用。

缓存内容:取决于您的应用程序,您可能需要缓存

  • 特定用户的受保护数据
  • 公共静态(或半静态,例如很少更改)数据

如何缓存:

  • 对于第一个缓存级别,我们可以使用答案中建议的GWT代码或编写自己的代码。
  • 对于第二个,我们必须使用浏览器缓存功能。标准方法是将您的数据放在html中(例如,静态html文件或由jsp / servlet生成的动态)。然后,您的应用程序使用http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html技术获取数据。

答案 4 :(得分:0)

我认为Itemscript有点整洁。它是一个RESTful JSON数据库,可以在客户端(GWT)和服务器上运行。

看看吧!

-jP