我们有一个gwt-client,可以从我们的服务器收到大量数据。从逻辑上讲,我想在客户端缓存数据,使服务器免于不必要的请求。
截至今天,我已经让我的模型处理数据缓存,而这些数据的扩展性不是很好。这也成为一个问题,因为我们团队中的不同开发人员开发了自己的“缓存”功能,这使得项目充满了重复。
我正在考虑如何实现一个“单一入口点”,它可以处理所有缓存,让模型对如何处理缓存毫无头绪。
有没有人在GWT中有客户端缓存的经验?是否有可以实施的标准方法?
答案 0 :(得分:10)
我建议你研究gwt-presenter和CachingDispatchAsync
。它为执行远程命令提供了单一入口点,因此是一个完美的缓存机会。
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)
有两种级别的缓存:
缓存内容:取决于您的应用程序,您可能需要缓存
如何缓存:
答案 4 :(得分:0)