2010-03-02 7 views
15

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

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

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

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

ответ

10

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

A recent blog post описывает возможный подход.

6

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

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

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

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

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

0

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

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

-JP

1

Есть два уровня кэширования:

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

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^