我们有一个gwt-client,它从我们的服务器接收到大量的数据。从逻辑上讲,我想在客户端缓存数据,避免服务器受到不必要的请求。GWT中的客户端缓存
截至今天,我已经放弃了我的模型来处理缓存数据,这不能很好地扩展。这也是一个问题,因为我们团队中的不同开发人员开发自己的“缓存”功能,使项目重复工作。
我在想如何实现一个“单一入口点”,它处理所有的缓存,让模型无法知道如何处理缓存。
有没有人有GWT客户端缓存的经验?有没有可以实施的标准方法?
我们有一个gwt-client,它从我们的服务器接收到大量的数据。从逻辑上讲,我想在客户端缓存数据,避免服务器受到不必要的请求。GWT中的客户端缓存
截至今天,我已经放弃了我的模型来处理缓存数据,这不能很好地扩展。这也是一个问题,因为我们团队中的不同开发人员开发自己的“缓存”功能,使项目重复工作。
我在想如何实现一个“单一入口点”,它处理所有的缓存,让模型无法知道如何处理缓存。
有没有人有GWT客户端缓存的经验?有没有可以实施的标准方法?
我建议你看看gwt-presenter和CachingDispatchAsync
。它为执行远程命令提供了一个单一入口点,因此是缓存的绝佳机会。
A recent blog post概述了一种可能的方法。
你可能想看看命令模式; 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中。此后,缓存的结果将返回给所有排队的新创建的AsyncCallbacks以进行相同的服务调用。
对于用于CRUD操作的已经完全构建的非常复杂的缓存引擎,请考虑Smart GWT。这个例子演示了为大型数据集做客户端操作自适应(当高速缓存允许的话),同时还支持呼叫的能力:
http://www.smartclient.com/smartgwt/showcase/#grid_adaptive_filter_featured_category
这种行为是通过如果你需要把你的ResultSet类暴露在它上面的widget:
http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/data/ResultSet.html
有缓存的两个层次:
什么缓存:依赖于应用程序,你可能想缓存
如何缓存: