управление большими сессиями с помощью GAE и VAADIN - PullRequest
1 голос
/ 11 декабря 2011

Мне трудно управлять сессиями с GAE / J и VAADIN. Столкнувшись с двумя проблемами:

  • сеанс сохраняется в хранилище данных между запросами, что дает жесткий предел в 1 МБ на сеанс. наша стартап-сессия 700 КБ, вы можете себе представить, что мы скоро сможем достичь этого предела.

  • это определенно становится проблемой производительности. Сеансы записи в хранилище данных / memcache иногда вызывают значительную задержку, которая ухудшает восприятие пользователем. В качестве обходного пути я настраиваю сервлет Vaadin GAE и применяю вместо него только асинхронные записи в хранилище данных. это решает проблемы с производительностью, но ставит под угрозу состояние приложения. в результате я иногда выхожу из экранов синхронизации, обнаруживая устаревшее состояние.

У кого-нибудь есть подобные проблемы? Или дать подсказку о решении?

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

У калитки похожая проблема, найден отличный обходной путь:

http://blog.small -improvements.com / 2012/02/19 / уменьшение калитка-сеанс размер-к-одному треть / * ** +1022 тысяча двадцать-одна *

1 Ответ

1 голос
/ 13 декабря 2011

Вы правы, что Ваадин хранит весь пользовательский интерфейс в сеансе.Однако, как правило, это не слишком много, поскольку это только набор компонентов (классов Java), которые видны пользователю.Обычно большой размер сеанса из-за большого количества данных, связанных с компонентами пользовательского интерфейса.

Это легко сделать, потому что поля в компонентах пользовательского интерфейса, которые указывают на объекты данных, делают их частью сеанса, и он может быстро стать большим, если вы не позаботитесь об этом должным образом.

КомуЧтобы решить эту проблему, вы можете немного реорганизовать свой код, чтобы уменьшить размер сеанса.В целом это означает

Единого рецепта для этого не существует, но вот некоторые отправные точки:

  1. Убедитесь, что вы не инициализируете весь пользовательский интерфейс в Application.init ()метод.Особенно откладывайте загрузку больших объемов данных для фактического отображения пользовательского интерфейса и прослушивателей событий.
  2. Загрузка и привязка данных, когда новое представление присоединено (отображается) в методе Component.attach ().
  3. Очистите данные в Component.detach (), когда он больше не будет виден / недоступен для пользователя.

Есть и другие способы, но с ними вам следует начать с оптимизации размера сеанса.

...