#web #browser-cache
#веб #браузер-кэш
Вопрос:
Я пишу веб-приложение, которое, вероятно, будет часто обновляться, включая изменения в файлах css и js, которые обычно агрессивно кэшируются браузером.
Чтобы изменения стали мгновенно видны пользователям, не влияя на производительность кэша, я разработал следующую систему:
У каждого файла ресурсов есть версия. К этой версии добавляется ? знак, например, main.css становится main.css?v= 147. Если я изменяю файл, я увеличиваю версию во всех ссылках. (На практике у меня, вероятно, просто был бы скрипт для увеличения версии для всех ресурсов при каждом развертывании обновления.)
Мои вопросы:
- Является ли это разумным подходом для производственного кода? Я что-то упустил? (Или есть лучший способ?)
- Вводит ли знак вопроса дополнительные накладные расходы? Я мог бы включить номер версии в имя файла, если это более эффективно.
Ответ №1:
Подход звучит разумно. Вот несколько моментов, которые следует учитывать:
- Если у вас много разных файлов ресурсов с разными номерами версий, разработчикам может потребоваться немало усилий, чтобы правильно управлять всеми ними и увеличивать их в правильных ситуациях.
- Возможно, вам потребуется внедрить политику для вашей команды
- или напишите задачу CI, чтобы проверить, что разработчики все сделали правильно
- Вы могли бы использовать один номер версии для всех файлов. Например, если у вас есть номер версии всего приложения, вы можете использовать это.
- Это делает «управление» версиями для разработчиков невозможным.
- Он изменяет ссылки при каждом развертывании
В зависимости от количества файлов ресурсов вы должны управлять частотой развертываний по сравнению частота развертываний, которые изменяют файл ресурсов, и количество запросов к этим файлам ресурсов одно или другое решение может быть более производительным. Это вопрос компромисса.
Комментарии:
1. Спасибо за ваш подробный ответ. Да, я считаю, что наличие одной глобальной версии, которая увеличивается при каждом развертывании, является самым простым и наиболее эффективным на данный момент, поскольку проект все еще довольно мал.