Постоянное кеширование изображений в GWT - PullRequest
3 голосов
/ 18 июля 2010

В чем разница между кешем и постоянным кешем в браузере. В GWT Framework файлы изображений переименовываются в шаблон .cache. , и я читаю где-то на веб-сайте Google, чтобы постоянно кэшировать изображения в GWT, настраиваю App-Server для постоянного кэширования их. Но я не знаю, как именно это сделать. Изображения на моем веб-сайте никогда не изменятся, и я хочу навсегда их кэшировать без какой-либо проверки версий (для лучшей производительности) С уважением

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

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

GWT просто помечает , какие файлы следует кэшировать ( .cache. ), а какие нет ( .nocache. ). На ваших серверах лежит ответственность за установку соответствующих заголовков HTTP (и на самом деле за правильную настройку серверов!).

У Google есть объяснение "Perfect Caching" в конце этой статьи: http://code.google.com/webtoolkit/doc/latest/DevGuideCompilingAndDebugging.html

Также здесь есть хорошая (общая) статья о заголовках кэширования HTTP и совместимости браузера и прокси: https://code.google.com/p/doctype-mirror/wiki/ArticleHttpCaching

Glassfish

Вам необходимо реализовать фильтр и настроить его в web.xml для Glassfish.

Я не буду вдаваться в подробности в этом ответе, но взгляну на это сообщение в блоге: http://blogs.oracle.com/cwebster/entry/caching_static_resources_in_glassfish

В конце имеется ссылка для класса фильтра .

1 голос
/ 18 июля 2010

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

При этом GWTвводит концепцию, которую они называют идеальным кэшированием.Он работает, разбивая ваше приложение на несколько файлов с именем что-то вроде .cache.html, и часть md5 всегда меняется, когда меняется код вашего приложения или ресурсы.Затем есть скрипт начальной загрузки, который содержит логику для поиска правильного файла <md5>.cache.html и его загрузки.Начальная загрузка никогда не должна кэшироваться.

На вашем сервере приложений вам необходимо настроить его примерно так (в данном случае Apache)

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

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

В этом случае он настроен на кеширование для одногогод.Насколько я знаю, нет никакого параметра для кэширования навсегда, это означает только очень большое время истечения срока действия.

Кэширование Tomcat

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

/*Please don't use this in production!*/
public class CacheFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        //cache everything for one year
        response.addHeader("Cache-Control", "max-age=31556926");
        chain.doFilter(request, response);
    }

    public void init(FilterConfig filterConfig) {
        this.fc = filterConfig;
    }

    public void destroy() {
        this.fc = null;
    }
}

Затем сопоставьте фильтр в tomcat или производных (например, glassfish) в web.xml:

<filter>
    <filter-name>cachingFilter</filter-name>
    <filter-class>CacheFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>cachingFilter</filter-name> 
    <url-pattern>*.cache.*</url-pattern>  
</filter-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...