Остановите кеширование браузерных скриптов в GWT App - PullRequest
15 голосов
/ 04 августа 2010

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

Ответы [ 2 ]

15 голосов
/ 06 августа 2010

Возможное решение зависит от способа размещения вашего приложения. Если вы размещаете хост прямо из контейнера сервлетов, вы можете использовать фильтр сервлетов, как описано здесь:

http://seewah.blogspot.com/2009/02/gwt-tips-2-nocachejs-getting-cached-in.html

Вот соответствующие фильтры из библиотеки tadedon:

http://code.google.com/p/tadedon/source/browse/tadedon-servlet/src/main/java/com/xemantic/tadedon/servlet/CacheDisablingFilter.java

http://code.google.com/p/tadedon/source/browse/tadedon-servlet/src/main/java/com/xemantic/tadedon/servlet/CacheForcingFilter.java

А вот guice ServletModule, который включает их для всего веб-приложения guice:

http://code.google.com/p/tadedon/source/browse/tadedon-gwt/src/main/java/com/xemantic/tadedon/gwt/http/GwtHttpCachingModule.java

Если вы используете какой-то обратный прокси-сервер перед tomcat, это будет еще проще. В случае apache (например, mod_proxy, mod_jk) и при условии, что все ресурсы приложения (html, графика, java-скрипты, css и т. Д.) Размещены на apache, просто установите эти параметры в конфигурации apache:

<Files *.nocache.*>
  ExpiresDefault "access"
</Files>

<Files *.cache.*>
  ExpiresDefault "now plus 1 year"
</Files>

Здесь описано:

http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html

в разделе «Идеальное кэширование». Такой сценарий развертывания предполагает, что только запросы rpc должны проходить через обратный прокси-сервер к tomcat. Если по каким-то причинам весь контекст приложения передается через tomcat, вы все равно можете использовать директиву apache LocationMatch вместо директивы Files.

14 голосов
/ 04 августа 2010

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

Это может помочь понять модель начальной загрузки GWT, чтобы понять, как это работает.

Первый скрипт, запрашиваемый вашим клиентом, your-app-name.nocache.js, не кэшируется, и он ничего не делает, кроме проверки пользовательского агента и возможностей браузера и выполнения второго запроса для соответствующего приложения JS.

На этом этапе запрашиваемый скрипт должен кэшироваться браузером, если он был запрошен ранее. Это {indistinguisable-numbers-and-letters}.cache.html файл.

При повторном развертывании приложения будет запущен файл nocache.js, который запросит другой файл cache.html с сервера, который еще не будет присутствовать в кэше, но который будет кэшироваться браузером после его загружен.

Вы делаете что-то необычное с отложенным связыванием или с кэшированием заголовков на вашем сервере? Это может привести к тому, что ваш файл nocache.js все-таки будет кэширован, что заставит его запрашивать старые cache.html s из кэша браузера.

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