Запросы версии в URL для обхода кэша браузера

#web #browser-cache

#веб #браузер-кэш

Вопрос:

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

Чтобы изменения стали мгновенно видны пользователям, не влияя на производительность кэша, я разработал следующую систему:

У каждого файла ресурсов есть версия. К этой версии добавляется ? знак, например, main.css становится main.css?v= 147. Если я изменяю файл, я увеличиваю версию во всех ссылках. (На практике у меня, вероятно, просто был бы скрипт для увеличения версии для всех ресурсов при каждом развертывании обновления.)

Мои вопросы:

  1. Является ли это разумным подходом для производственного кода? Я что-то упустил? (Или есть лучший способ?)
  2. Вводит ли знак вопроса дополнительные накладные расходы? Я мог бы включить номер версии в имя файла, если это более эффективно.

Ответ №1:

Подход звучит разумно. Вот несколько моментов, которые следует учитывать:

  • Если у вас много разных файлов ресурсов с разными номерами версий, разработчикам может потребоваться немало усилий, чтобы правильно управлять всеми ними и увеличивать их в правильных ситуациях.
    • Возможно, вам потребуется внедрить политику для вашей команды
    • или напишите задачу CI, чтобы проверить, что разработчики все сделали правильно
  • Вы могли бы использовать один номер версии для всех файлов. Например, если у вас есть номер версии всего приложения, вы можете использовать это.
    • Это делает «управление» версиями для разработчиков невозможным.
    • Он изменяет ссылки при каждом развертывании

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

Комментарии:

1. Спасибо за ваш подробный ответ. Да, я считаю, что наличие одной глобальной версии, которая увеличивается при каждом развертывании, является самым простым и наиболее эффективным на данный момент, поскольку проект все еще довольно мал.