кэширование файлов на стороне клиента - PullRequest
16 голосов
/ 11 августа 2010

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

Обходной путь для этой проблемы - переименовать все файлы (как часть сборки),таким образом, что имя файла включает в себя MD5-хэш его содержимого, например,

foo.js -> foo_AS577688BC87654.js
me.png -> me_32126A88BC3456BB.png

Однако, помимо переименования самих файлов, все ссылки на эти файлы должны быть изменены.Например, тег, такой как <img src="me.png"/>, должен быть изменен на <img src="me_32126A88BC3456BB.png"/>.

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

Конечно, одно из решений - полностью отключить кэширование в браузере (и любые кэши между сервером и браузером) с использованием заголовков HTTP.Однако отсутствие кэширования создаст собственный набор проблем.

Есть ли лучшее решение?

Спасибо, Дон

Ответы [ 11 ]

1 голос
/ 27 августа 2010

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

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

2. Каждый раз новая версия приложения развертывается в другом контексте, который содержит номер версии. например. www.site.com/app_2_6_0/ Я не совсем уверен в этом, поскольку закладки пользователей будут нарушаться при каждом обновлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...