使用GAE和VAADIN管理大型会话

时间:2011-12-11 13:34:02

标签: google-app-engine google-cloud-datastore vaadin

我很难与GAE / J和VAADIN进行会谈。面对两个问题:

  • 会话在请求之间的数据存储中持久存在,每个会话的硬限制为1MB。我们的启动会话是700K,您可以想象我们很快就能达到这个限制。

  • 这肯定会成为性能问题。数据存储区/内存缓存区会话写入会导致某些时间显着延迟,从而降低用户体验。作为一种解决方法,我定制了Vaadin GAE servlet,并强制仅执行异步数据存储区写入。这解决了性能问题,但妥协了应用程序状态。因此,我有时会在同步屏幕上检测到陈旧状态。

有类似问题的人吗?或者给出解决方案提示?

===============================================

Wicket有类似的问题,找到了很好的解决方法:

http://blog.small-improvements.com/2012/02/19/reducing-wicket-session-size-to-one-third/

1 个答案:

答案 0 :(得分:1)

Vaadin将整个UI存储在会话中是对的。但是,通常不会过多考虑它只是一组对用户可见的组件(Java类)。通常较大的会话大小是因为很多数据被绑定到用户界面组件。

很容易做到这一点,因为UI组件中指向数据对象的字段使它们成为会话的一部分,除非您正确处理它,否则它会迅速变大。

要解决此问题,您可能需要稍微重构代码以使会话大小更小。一般来说,这意味着

没有一个方法可以做到这一点,但这里有一些起点:

  1. 确保您没有在Application.init()方法中初始化整个UI。特别是推迟加载大量数据以实际显示UI和事件监听器。
  2. 在Component.attach()方法中附加(显示)新视图时加载和绑定数据。
  3. 当Component.detach()不再可见/可供用户访问时,清除数据。
  4. 还有其他方法,但有了这些方法,您应该开始使用会话大小优化。