Как сделать недействительным содержимое кэша веб-браузера - PullRequest
9 голосов
/ 03 февраля 2012

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

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

Есть ли способ, когда вносятся измененияв JS, CSS (или другие ресурсы), чтобы принудительно загрузить новую копию?

Ответы [ 3 ]

16 голосов
/ 03 февраля 2012

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

Может быть что-то вроде этого для получения JS:

http://yourdomain.com/content/js/functions.js?v=201232
3 голосов
/ 19 мая 2016

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

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

<img src="images/title.gif?v=2" />

Также, вероятно, не важно упоминать это, но термин "аннулирование кэша" в этом отношении не являетсятехнически правильно.Чтобы сделать кеш недействительным, нужно удалить записи кеша.Нет никакого реального способа действительно сделать это программно для браузера.То, о чем мы на самом деле говорим, - это запросить у веб-сервера новый файл из-за изменения имени файла, без принудительного удаления исходного файла.Вы можете легко проверить это, изменив версию файла назад и вперед между неиспользуемой версией и более старой использованной версией и просмотрев ответы HTTP 200 и 304 соответственно.

enter image description here

1 голос
/ 02 мая 2012

Взгляните на HTML5 Boilerplate. http://html5boilerplate.com/ Он выполняет множество задач, которые вас беспокоят автоматически, и обрабатывает аннулирование кэша, используя файлы CSS с разными именами каждый раз, когда они модифицируются.

Соответствующий фрагмент из прилагаемого .htaccess :

# ----------------------------------------------------------------------
# | Filename-based cache busting                                       |
# ----------------------------------------------------------------------

# If you're not using a build process to manage your filename version
# revving, you might want to consider enabling the following directives
# to route all requests such as `/style.12345.css` to `/style.css`.
#
# To understand why this is important and even a better solution than
# using something like `*.css?v231`, please see:
# https://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

# <IfModule mod_rewrite.c>
#     RewriteEngine On
#     RewriteCond %{REQUEST_FILENAME} !-f
#     RewriteRule ^(.+)\.(\w+)\.(bmp|css|cur|gif|ico|jpe?g|m?js|png|svgz?|webp|webmanifest)$ $1.$3 [L]
# </IfModule>
...