.htaccess: Контроль кэша, как я могу обрабатывать обновления сайта? - PullRequest
4 голосов
/ 25 февраля 2011

Я только что искал в Интернете, но не смог найти хорошего ответа на этот вопрос:

Расширение скорости страницы Google для FF подсказало мне кэшировать файлы на моем сайте (PHP). Поэтому я обновил свой .htaccess (в моей бета-области веб-сайта) для кэширования файлов определенных типов:

ExpiresActive On
ExpiresDefault A0
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>

Во время кодирования в области бета-тестирования я заметил, что из-за настроек управления кэшем мне нужно нажать F5 , чтобы получить, например, последний файл .css. Это не плохо для меня ... однако как насчет пользователей?

Так могу ли я сказать браузеру повторно загружать все файлы (только), когда я обновляю свой сайт (или срок действия файла истекает) и использовать кеш, если нет?

Было бы замечательно, если бы я мог сказать браузеру: «Эй, все файлы до времени обновления устарели, пожалуйста, загрузите их заново - однако файлы после времени обновления в порядке, используйте кеш».

Ответы [ 2 ]

6 голосов
/ 10 декабря 2011

Вот простой подход, который я иногда использую, который не требует сложной настройки.

Всякий раз, когда вы изменяете файл CSS или JavaScript, просто добавьте фиктивный параметр в разметку.Я обычно использую текущую дату и / или время.Например:

<link type="text/css" rel="stylesheet" href="site.css?120911" />

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

2 голосов
/ 25 февраля 2011

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

Вот что делает браузер:использование файла из кэша, ничего не запрашивая с сервера - и это правильное поведение.


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

Обычно это делается путем интеграции номера версии в имена файлов :

http://www.yoursite.com/my-file-123.css

И, когда файл обновляется:

http://www.yoursite.com/my-file-124.css

Поскольку URL-адрес изменился, браузер не имеет файла в своем кэше и запрашивает новую версию с сервера.


Конечно, делать это вручную довольно непросто и подвержено ошибкам ...

Итак, обычно (при условии, что у вас есть скрипт сборки,который извлекает источники вашего сайта из системы управления версиями идайте их для производства) , вы интегрируете этот процесс в сценарий создания вашего сайта.

...