GWT中的客户端缓存

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

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

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

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

我建议你研究一下gwt-presenter和CachingDispatchAsync 。 它为执行远程命令提供了单一入口点,因此是缓存的绝佳机会。

最近的博客文章概述了一种可能的方法。

您可能想看看命令模式; 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。

对于已经完全构建的,非常复杂的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

有两种级别的缓存:

  • 在一个浏览器会话期间缓存。
  • 缓存浏览器会话,例如缓存浏览器重新启动后应该可以使用缓存数据。

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

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

如何缓存:

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

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

看看这个!

-J.P