Рекомендуемый метод управления кэшем? - PullRequest
4 голосов
/ 21 февраля 2011

Я ищу принудительное обновление зависимостей JS / CSS.

Будет ли работать <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"> для этого, или это только приведет к обновлению содержимого самой страницы?

Ответы [ 3 ]

4 голосов
/ 21 февраля 2011

Вы можете использовать серверный язык для добавления метки времени к каждому извлекаемому файлу:

<?php $timestamp = time(); ?>
<link href="shell.css?timestamp=<?=$timestamp?>" rel="stylesheet" type="text/css" />

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

3 голосов
/ 21 февраля 2011

Нет, он контролирует только текущий документ. Если вам не нужны ужасные URI со случайными строками запроса, самое время настроить сервер. Предполагая Apache:

# mod_expires directives: 
# enable expires/max-age headers and set default to 0 seconds from last access time
ExpiresActive On
ExpiresDefault A0
# configure ExpiresByType on your specific types, eg ExpiresByType text/css A0



# mod_headers directives:
# send variety of no-cache directives, should cover any quirky clients and gateways
Header set Cache-Control "max-age=0, private, no-cache, no-store, must-revalidate, proxy-revalidate, no-transform"
Header set Pragma "no-cache"
# enclose this in <Files> directive for specific file eg <Files *.js>

Эти группы директив также будут работать в конфигурациях для каждого каталога (.htaccess файлов) (в случае хостинга с общим окружением) при соблюдении следующих требований:

  1. AllowOverride FileInfo действует
  2. Либо mod_expires, либо mod_headers включено

Если оба включены - обратите внимание, что группы перекрываются на max-age, вы захотите удалить его из Header и использовать более точное управление через ExpiresXXXX. Описанные настройки довольно распространены для среды общего хостинга, поэтому спросите администратора сервера или просто попробуйте сами (вернет 500 Internal Server Error, если соответствующий модуль не включен, или не даст эффекта, если обработка .htaccess не включена)

3 голосов
/ 21 февраля 2011

Приведенный выше ответ работает, хотя я, вероятно, предпочел бы использовать ?version=1 в конце, чтобы он кешировался, когда изменений нет. Также эффективна настройка политик кэширования веб-серверов.

Это хорошая статья об объяснении кеширования для веб-страниц: http://www.mnot.net/cache_docs/

...