Wicket: правильное кеширование CSS ресурсов - PullRequest
0 голосов
/ 26 мая 2011

Мы только что перешли из GWT в калитку 1.4.Хотя в целом мы очень довольны, у нас все еще есть некоторая кривая обучения определенным вещам, которые GWT упростил.Одной из таких вещей является кэширование ресурсов.

Как настроить ресурсы нашего приложения (в частности, CSS), чтобы они не загружались при каждом запросе страницы?

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

Мы ссылаемся на CSS непосредственно в наших файлах HTML, например:

    <link href="/css/ag.screen.css" rel="stylesheet" type="text/css">
    <link href="/css/ag.base.css" rel="stylesheet" type="text/css">

Я не уверен, что это имеет значение, но все наши страницы монтируются с IndexedParamUrlCodingStrategy, так как нам нужно, чтобы они были как закладки, так и имели определенную структуру URL.

Я попытался реализовать то, что предлагает Стефан Фусенеггер в его blog (то есть ссылка на CSS через вклад заголовка, а не напрямую в HTML), но это, похоже, не помогло (я попытался проверить заголовки с помощью "curl -I").

Существует ли стандартный способ установки заголовков Cache-Control или Expiration для ресурсов в Wicket 1.4?Для этого стоит перейти на Wicket 1.5?(Я не решаюсь сделать это, потому что он еще официально не выпущен).

Редактировать: Я только что сделал 1,5 еще одну попытку, но на данный момент отсутствие документации действительно является препятствием.IndexedParamUrlCodingStrategy и связанные с ним классы пропали, и в руководстве по миграции почти ничего не сказано об этом.

Редактировать 2: Я только что заметил кое-что очень странное - когда я захожу на одну из моих страниц, либо непосредственно вводя URL-адрес, либо щелкая BookmarkablePageLink, ресурсы, на которые ссылается эта страница (CSS, изображения и т. Д.), Похоже, кэшируются (я не вижу запросов на них в своих журналах).Но если я приду на ту же страницу через отправку формы, все ресурсы будут загружены снова.Почему отправка формы приводит к повторной загрузке ресурсов, на которые имеются ссылки на странице?

Ответы [ 4 ]

1 голос
/ 27 мая 2011

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

На данный момент я застрял под 1.4.x и нашел решение, которое мне подходит. Я пользуюсь великолепной библиотекой, которую написал Стефан Фусенеггер, и он сделал доступным здесь . Реализация довольно проста, я использую StaticResourceVersionProvider в производственном режиме. У меня до сих пор не было проблем (пока что для моих клиентов это здорово).

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

1 голос
/ 26 мая 2011

Поскольку вы переходите на Wicket, я бы рекомендовал вам использовать 1.5RC4.2. Глядя на сообщения об ошибках в этом RC, я думаю, что следующий может быть 1.5.0Final. О кэшировании смотрите эту вики-страницу: https://cwiki.apache.org/WICKET/caching-in-wicket-15.html. Это около 1,5, но он также говорит, что отличия от 1,4.

0 голосов
/ 15 сентября 2011

Для управления заголовками не-Wicket ресурсов вы можете использовать простой Servlet Filter, который указан перед WicketFilter в вашем web.xml.Просто проверьте URL запроса, и если расширение файла - .css / .js / ..., тогда просто установите заголовки кэша в ответе.О ** UrlCodingStrategies в Wicket 1.5 читайте http://wicketinaction.com/2011/07/wicket-1-5-request-mapper/ и следующие две статьи.Надеюсь, вам будет понятнее.

0 голосов
/ 14 сентября 2011

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

На на вики-странице Wicket есть дополнительная информация о том, как работает кэширование ресурсов в 1.5 .

...