Кэширование на стороне клиента в GWT - PullRequest
15 голосов
/ 02 марта 2010

У нас есть gwt-клиент, который получает довольно много данных с наших серверов. Логически я хочу кэшировать данные на стороне клиента, защищая сервер от ненужных запросов.

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

Я думаю о том, как можно реализовать «единую точку входа», которая обрабатывает все кэширование, и модели не имеют представления о том, как происходит кэширование.

Кто-нибудь имеет опыт работы с кэшированием на стороне клиента в GWT? Есть ли стандартный подход, который можно реализовать?

Ответы [ 5 ]

10 голосов
/ 02 марта 2010

Я предлагаю вам взглянуть на gwt-Presenter и CachingDispatchAsync. Он обеспечивает единую точку входа для выполнения удаленных команд и, следовательно, прекрасную возможность для кэширования.

A недавнее сообщение в блоге описывает возможный подход.

6 голосов
/ 02 марта 2010

Возможно, вы захотите взглянуть на шаблон команд; Рэй Райан выступил в Google IO с докладом о передовых практиках в GWT. Вот расшифровка: http://extgwt -mvp4g-gae.blogspot.com / 2009/10 / gwt-app-Architecture-best-practice.html

Он предлагает использовать шаблон команд с использованием объектов Action и Response / Result, которые добавляются в прокси-сервер службы и из него. Это отличные объекты для инкапсуляции любого кэширования, которое вы хотите выполнить на клиенте.

Вот выдержка: «У меня есть хорошая единица валюты для реализации политик кэширования. Может быть, когда я дважды вижу один и тот же запрос GET, я кеширую ответ, полученный в прошлый раз, и просто возвращаю его себе немедленно. Не беспокойтесь о поездке на сервер. "

В довольно большом проекте я выбрал другое направление. Я разработал объект DtoCache, который по существу содержал ссылку на каждый AsyncCallback, который ожидал ответа от вызова службы в очереди ожидания. Как только DtoCache получил объекты с сервера, они были кэшированы внутри DtoCache. Кэшированный результат отныне возвращался всем вновь созданным очередям AsyncCallbacks для одного и того же вызова службы.

1 голос
/ 10 марта 2010

Существует два уровня кэширования:

  • Кэширование во время одной сессии браузера.
  • Кеширование между браузерами, например, кэшированные данные должны быть доступны после перезапуска браузера.

Что кэшировать: зависит от вашего приложения, вы можете кэшировать

  • Защищенные данные для конкретного пользователя
  • Публичные статические (или полустатические, например, редко меняющиеся) данные

Как кешировать:

  • Для первого уровня кэширования мы можем использовать код GWT, как предлагается в ответах, или написать свой собственный.
  • Для второго мы должны использовать функции кэширования браузера. Стандартный подход - поместить ваши данные в html (например, статические html-файлы или динамические, сгенерированные jsp / servlet). Затем ваше приложение использует методы http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsOverlay.html для получения данных.
1 голос
/ 02 марта 2010

Для уже полностью построенного, очень сложного механизма кэширования для операций 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

0 голосов
/ 09 марта 2010

Я думал, Itemscript был довольно аккуратным. Это база данных RESTful JSON, которая работает как на клиенте (GWT), так и на сервере.

Проверьте это!

-JP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...