Обычный подход к решению подобных проблем заключается в использовании заголовков кэширования HTTP в сочетании с продуманным построением URL-адресов для ресурсов, на которые ссылаются ваши страницы.
Общая идея такова: каждый ресурс, загружаемый вашей страницей (изображения, скрипты, файлы CSS и т. Д.), Должен иметь уникальный версионный URL.Например, вместо загрузки /images/button.png
вы загрузите /images/button_v123.png
, а при изменении этого файла его URL-адрес изменится на /images/button_v124.png
.Как правило, это выполняется путем перезаписи URL-адресов по статическим URL-адресам файлов, так что, например, веб-сервер знает, что /images/button_v124.png
должен действительно загружать файл /images/button.png
из файловой системы веб-сервера.Создание номеров версий можно выполнить, добавив номер сборки, используя CRC содержимого файла или многими другими способами.
Затем необходимо убедиться, что, где бы URL ни создавались на родительской странице, они ссылаются на версионный URL.Очевидно, что для этого требуется динамический код, используемый для построения всех URL-адресов, что может быть достигнуто либо путем корректировки кода, используемого для генерации ваших страниц, либо с помощью плагинов для всего сервера, которые влияют на все запросы text/html
.
Затем вы устанавливаете заголовок Expires
для всех запросов ресурсов (изображения, сценарии, файлы CSS и т. Д.) На дату в далеком будущем (например, через 10 лет).Это эффективно кеширует их навсегда.Это означает, что все запросы, загружаемые каждой из ваших страниц, всегда будут выбираться из кэша;аннулирование кэша никогда не происходит, и это нормально, потому что когда базовый ресурс изменяется, родительская страница будет использовать новый URL для его поиска.
Наконец, вам нужно выяснить, как вы хотите кэшировать свои «родительские» страницы,То, как вы это делаете, является суждением.Вы можете использовать ETag
/ If-None-Match
заголовки HTTP, чтобы каждый раз проверять наличие новой версии страницы, что очень быстро загрузит страницу из кэша, если сервер сообщит, что она не изменилась.Или вы можете использовать Expires
(и / или Max-Age
), чтобы перезагрузить родительскую страницу из кэша в течение заданного периода времени перед проверкой сервера.
Если вы хотите сделать что-то еще более изощренное, вы всегда можете установить в киоске собственный прокси-сервер - в этом случае у вас будет полный централизованный контроль над тем, как осуществляется кэширование.