Остановите сценарии браузера, кэширующиеся в Приложении GWT

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

15
задан skaffman 4 August 2010 в 16:38
поделиться

2 ответа

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

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

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

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

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

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

14
ответ дан 1 December 2019 в 02:18
поделиться

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

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

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

15
ответ дан 1 December 2019 в 02:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: