Заставить браузер перезагружать css/js, только если они изменились

Есть много вопросов и ответов по SO, связанных с моей проблемой [Я хочу, чтобы браузер кешировал js / css навсегда. Во время новой версии, если некоторые файлы js / css были обновлены, браузер должен перезагрузить и кэшировать их.]

Это решение показалось мне наиболее подходящим: каков элегантный способ заставить браузеры перезагружать кэшированные файлы CSS/JS?

Однако есть только одна вещь, которую я не могу понять. Решение использует last_modified_time. Тем не менее, мне не разрешено использовать его. Мне нужно использовать какой-то другой механизм.

Какие есть варианты? Есть ли возможность предварительно рассчитать версии во время сборки и обновить (заменить) их в jsps через скрипт сборки (перед развертыванием, чтобы номера версий не вычислялись во время выполнения)? Какой-нибудь существующий инструмент для этой цели? Я использую Java/Jsp.

3 ответа

Решение

Возможно, это не лучший способ, но я сейчас и делаю:

  1. Все мои js / css имеют номер редакции [source control = svn]
  2. Ссылки в моем jsp похожи на /foo/path1/path2/xyz000000/foo.
  3. Шаг сборки 1 - Генерация карты файлов css|js и их номеров ревизий
  4. Шаг сборки 2 - Замените ссылки xyz000000 в jsps на хэш версий SVN
  5. Правило в редакторе URL для направления всех /foo/path1/path2/xyz<767678>/foo. в /foo/path1/path2/foo.[js|css]
  6. Бесконечно кешируйте файлы css|js
  7. Всякий раз, когда есть фиксация, номер ревизии меняется, как и ссылки в.jsp

Мы всегда используем

file.css?[deploytimestamp]

Таким образом, файл CSS кэшируется для каждого развертывания на клиенте. То же самое касается нашего уменьшенного JavaScript. Это вариант для вас?

Создайте md5-хэш каждого CSS-файла после развертывания. Используйте этот хэш вместо метки времени в URL-адресе CSS.

file.css?[hash of file.css contents]

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

Другие вопросы по тегам