Кэширование изображений в CSS - PullRequest
4 голосов
/ 04 марта 2011

Моя ситуация
В настоящее время я использую Cache Busting, когда добавляю файлы CSS вроде этого:

echo "<link href='stylesheet.css?" . filemtime('stylesheet.css') . "' />"

Моя цель
Теперь я хотел бы сделать нечто подобное для изображений, которые я включаю в свой файл CSS.

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

Мой вопрос
Как я могу добавить filemtime() к изображениям в моих файлах CSS, сохраняя при этом файлы отдельно?


Редактировать
Я хотел бы использовать заголовки Far Future Expires для кэширования файлов.

Ответы [ 2 ]

3 голосов
/ 04 марта 2011

Вы можете переименовать ваши CSS-файлы в style.css.php, а затем использовать PHP внутри них. Пока результат постобработки находится в правильном формате CSS, он должен работать. Я делал это в прошлом. Я не уверен, если это необходимо, но если это вызывает у вас проблемы, вы можете использовать что-то вроде заголовка («Content-type ...») и убедиться, что оно отправлено в виде файла CSS.

2 голосов
/ 04 марта 2011

Чтобы добиться очистки кэша , лучшим способом является отправка правильных заголовков.Убедитесь, что Apache настроен на отправку заголовка Expires: now.Таким образом, в файле .htaccss:

Header always set Cache-Control "no-store, no-cache, must-revalidate"
Header always set Expires "Thu, 01 Jan 1970 00:00:00 GMT"

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

Однако, если вы хотите условно кэшировать, то япредложил бы, делает одну из нескольких вещей.

  1. Включение номера версии в имя файла CSS.Таким образом, у вас есть файл, который выглядит как mycss.1.css, mycss.2.css.Это займет немного больше работы, так как вам нужно согласовать оба имени файла.Но это лучше, поскольку вы не отправляете файлы с помощью PHP (без попадания ресурсов), вы можете использовать CDN (даже лучше), и вы все равно можете воспользоваться заголовками с истекшим сроком давности.

  2. Установите заголовок Cache-Control: must-revalidate и правильный заголовок E-Tag , чтобы все, что ему нужно было сделать, это отправить заголовок 304 Not Modified, если содержимое не изменилось ...

...