Когда браузер автоматически очищает кеш внешнего файла JavaScript?

У меня есть ресурс JavaScript, который можно редактировать в любое время. После того, как он отредактирован, я бы хотел, чтобы он был распространен в браузере пользователя относительно быстро (например, может быть, 15 минут или около того), однако частота редактирования этого ресурса немногочисленна (возможно, 2 раза в месяц).

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

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

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

Я пробовал погуглить, но большинство обращений, которые я нашел, касались очистки кеша браузера ... это не то, что я ищу.


person Elijah Manor    schedule 15.10.2008    source источник


Ответы (3)


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

Если вы не хотите назначать строку версии каждый раз при редактировании источника, вы можете вычислить ее на основе отметки времени файловой системы или номера фиксации подрывной операции:

<script src="/script.js?time_stamp=1224147832156" type="text/javascript"></script>
<script src="/script.js?svn_version=678" type="text/javascript"></script>

   

person aemkei    schedule 16.10.2008
comment
Ага, это именно то, что мы делаем. То же самое и для внешних файлов CSS. - person dmercer; 22.01.2009
comment
кэшируется ли javascript для svn_version = 678, или он перезагружается каждый раз (потому что добавлен параметр get)? - person Beerweasle; 16.11.2009
comment
Этот подход также использовался в Ruby on Rails. - person alessioalex; 06.10.2011
comment
Как вы можете вычислить его на основе отметки времени файловой системы или номера фиксации вашей подрывной операции? SVN делает это при фиксации? - person Phill Pafford; 02.02.2012
comment
Однако это не является пуленепробиваемым, некоторые прокси-серверы включают параметры запроса как часть кеша. Лучшее решение - добавить к имени файла отметку времени или версию. На моем сайте я генерирую 7-значную контрольную сумму файла во время сборки, поэтому, если что-то изменится в файле, создается новая контрольная сумма, файл переименовывается, и, таким образом, браузер знает, что нужно загрузить обновленный файл. - person Dominic; 02.11.2012

Поместите в свой код javascript такую ​​версию, которая обновляется при внесении изменений.

<script src="/code.js?ver=123" type="text/javascript"></script>

Тогда они всегда будут получать новую версию.

person Craig    schedule 15.10.2008
comment
Конечно, предполагается, что HTML тоже не кэшируется ...;) - person RodeoClown; 16.10.2008

HTTP предоставляет несколько элементов управления для кэширования, которые браузеры по-разному игнорируют. Если вы установите разумную дату истечения срока действия, большинство браузеров будут проверять, установлена ​​ли у них текущая версия с подходящей периодичностью.

Поисковый запрос, который вы хотите включить сюда (чтобы избежать инструкций пользователя в браузере), - это HTTP.

Для получения дополнительной информации см .:

person acrosman    schedule 15.10.2008