В соответствии с популярными рекомендациями Yahoo по ускорению работы вашего сайта мы обслуживаем статический контент из CDN с использованием заголовков истечения срока действия кэша в будущем. Конечно, нам необходимо периодически обновлять эти «статические» файлы, поэтому в настоящее время мы добавляем инфиксную версию как часть имени файла (на основе суммы SHA1 содержимого файла). Таким образом:
styles.min.css
становится:
styles.min.abcd1234.css
Однако управление версионными файлами может стать утомительным, и мне было интересно, может ли запись аргумента GET быть чище и лучше:
styles.min.css?v=abcd1234
Что вы используете и почему? Есть ли какие-либо соображения, связанные с браузером или прокси / кешем, которые я должен рассмотреть?
static-content
cache-control
Дэвид Эйк
источник
источник
Ответы:
Согласно Google Make the Web Faster , страницы с параметрами запроса не кэшируются многими HTTP прокси.
Так
styles.min.abcd1234.css
что это предпочтительное решение. Вы можете использовать соответствующий механизм перезаписи URL, чтобыstyles.min.abcd1234.css
сделать егоstyles.min.css?v=abcd1234
прозрачным и простым в реализации .Если вы поддерживаете только HTTPS, этот совет не применяется, поскольку прокси-серверы обычно не могут кэшировать страницы, которые обслуживаются по SSL.
источник
Используя версионирование в стиле GET, из пустого кэша несколько URL-адресов - например,
style.css?v=123
иstyle.css?v=456
- вернут одно и то же содержимое. Однако я не вижу, что это будет проблематично, тем более что вы будете ссылаться только на один за раз.Я думаю, вы найдете, что стиль GET гораздо проще поддерживать. Вам не нужны отдельные файлы: просто измените URL, и браузеры снова загрузят CSS.
ОБНОВЛЕНИЕ: при дальнейших исследованиях выясняется, что использование строки запроса может остановить кеширование файлов браузерами . Однако, если вы возвращаете правильные заголовки, такие как
Expires
это, не проблема.ОБНОВЛЕНИЕ 2: принятый ответ указывает, что некоторые прокси не кэшируют файлы со строкой запроса. Однако это основано на старой информации; конкретная проблема, которую они упоминают в Squid, была исправлена 7 лет назад. Impressive Webs хорошо написали об этом.
источник
Оба будут работать одинаково хорошо, так как строка запроса считается частью URL-адреса, и, изменяя ее, вы фактически изменяете имя ресурса, заставляя браузер получать новую копию файла.
Я говорю о том, какой метод вам проще поддерживать.
источник
это не ответ на вышеуказанный вопрос , я хочу лучшее решение, поэтому я спрашиваю здесь сам
Оба метода потребуют модификации файлов, на которые ссылаются файлы css и js. Таким образом, в действительности это потребует перезагрузки сервера приложений после внесения изменений.
Есть ли лучший способ, где управление версиями статических файлов может осуществляться без перезагрузки сервера приложений?
в решении исключено следующее
решение также не должно влиять на настройку cache-control или истекает.
Благодарность
источник