Лучшая практика для управления кэшированием всех ресурсов (изображения, css, js, все)

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

Согласно исследованию, которое я сделал здесь и в другом месте, все, похоже, согласны с тем, что добавление? v = {version #} в такой актив, как css или js файл, является отличным способом автоматического аннулирования кеша когда актив обновляется. (В соответствии с Заставить браузер очистить кеш и Лучший способ предотвратить кеширование браузером файлов JavaScript)

Но мне кажется, что это решение должно быть обобщено на все активы, которые находятся на веб-сервере.

Итак, мой вопрос: было бы хорошей практикой иметь конструкцию script просматривать каждый атрибут src="" на всем веб-сайте - будь то img, css или js и программно добавлять? = {timestamp } где timestamp - время последнего изменения файла. Таким образом, всякий раз, когда вы нажимаете от разработчика до стадии постановки на производство, только те файлы, которые были изменены, будут иметь измененную метку времени, и браузер будет знать, чтобы аннулировать кеш для этих файлов.

Любые недостатки с этим подходом?

ПРИМЕЧАНИЕ. Размышляя об этом чуть больше, временная метка определенно будет нежелательной в случае изменений, которые позже будут отменены. Поэтому добавление? = {Md5 (filecontents)} является более надежным подходом. Тем не менее, вопрос о том, реализуется ли это по всем активам и всем сборкам, остается.

Ответ 1

Нашел то, что я считаю приемлемым решением в Как заставить браузер перезагружать кешированные файлы CSS/JS? Не знаю, как я пропустил это в своем первоначальном исследовании.

Для всех, кто приходит к этому вопросу, обратите внимание, что я имею в виду первый ответ на связанной странице, который ссылается на Google mod_pagespeed плагин для апач. Это работает на уровне веб-сервера, поэтому "[работает] с PHP, rails, python, static HTML - что угодно".

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