Всякий раз, когда я изменяю в css, javascript, файлы изображений, изменения не будут отображаться, пока пользователь не очистит кеш вручную, как я могу решить эту загадку ..? [Дубликат]

Функциональный подход:

2.x

>>> x = [1,2,3,2,2,2,3,4]
>>> filter(lambda a: a != 2, x)
[1, 3, 3, 4]

3.x

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter((2).__ne__, x))
[1, 3, 3, 4]

или

>>> x = [1,2,3,2,2,2,3,4]
>>> list(filter(lambda a: a != 2, x))
[1, 3, 3, 4]
63
задан BartoszKP 12 November 2015 в 14:26
поделиться

14 ответов

Общее решение

Нажатие Ctrl + F5 (или Ctrl + Shift + R) для принудительной перезагрузки кеша. Я полагаю, что Mac использует Cmd + Shift + R.

PHP

В PHP вы можете отключить кеш, установив дату истечения срока в прошлом с заголовками:

header("Expires: Tue, 01 Jan 2000 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

Chrome

Кэш Chrome можно отключить, открыв инструменты разработчика с помощью F12, щелкнув значок шестеренки в правом нижнем углу и выбрав Отключить кеш в диалоговом окне настроек, например:

enter image description here [/g5] Изображение взято из этого ответа .

Firefox

Тип about:config в строке URL затем найдите запись под названием network.http.use-cache. Установите это на false.

80
ответ дан Community 21 August 2018 в 23:55
поделиться
  • 1
    Или [Ctrl] + [Shift] + [R] – Florent 13 July 2012 в 17:20
  • 2
    Спасибо Jam Waffles за подробное описание и благодарю всех вас за ответы. Большое спасибо. – user1511579 13 July 2012 в 17:29
  • 3
    В последних версиях Chrome: CTRL + R. – Alix Axel 25 June 2013 в 02:29
  • 4
    Для Chrome интерфейс, которым вы поделились, немного изменился. Просто нажмите вкладку «Сеть», и вы установите флажок. – Barry Guvenkaya 8 March 2017 в 03:09
  • 5
    FYI: для Opera на Mac это cmd-alt-R – Derwent 24 May 2017 в 04:58

Если вы хотите быть уверенным, что эти файлы были должным образом обновлены Chrome для всех пользователей, вам необходимо иметь must-revalidate в заголовке Cache-Control. Это заставит Chrome перепроверить файлы, чтобы проверить, нужно ли их повторно использовать.

Рекомендовать следующий заголовок ответа:

Cache-Control: must-validate

Это говорит Chrome проверить с сервером и посмотреть, есть ли новый файл. Если есть новый файл, он получит его в ответе. Если нет, он получит ответ 304 и уверенность в том, что тот, который находится в кеше, обновлен.

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

Вот сообщение в блоге , в котором рассматривается проблема далее.

0
ответ дан AgilePro 21 August 2018 в 23:55
поделиться
<script src="foo.js?<?php echo date('YmdHis',filemtime('foo.js'));?>"></script>

Он обновится, если будет изменен.

0
ответ дан AllenBooTung 21 August 2018 в 23:55
поделиться
  • 1
    Кто-нибудь может прокомментировать, почему это запрещено? – AllenBooTung 13 January 2018 в 10:04

Попробуйте очистить кеш браузера.

0
ответ дан DominicEU 21 August 2018 в 23:55
поделиться

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

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

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

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

0
ответ дан ePi272314 21 August 2018 в 23:55
поделиться

Если вы хотите избежать этого на стороне клиента, вы можете добавить что-то вроде ?v=1.x в ссылку css-файла, когда содержимое файла будет изменено. например, если <link rel="stylesheet" type="text/css" href="css-file-name.css"> вы можете изменить его на <link rel="stylesheet" type="text/css" href="css-file-name.css?v=1.1">, это будет обходить кеширование.

38
ответ дан F0G 21 August 2018 в 23:55
поделиться
  • 1
    Хорошая точка, но затем браузер всегда спрашивает о файле. Конечно, сервер вернется и «304 Not Modified». – Andrzej Jozwik 31 May 2013 в 14:25
  • 2
    @ajozwik Я тестировал с Firefox 26.0 и Chromium 31.0.1650.57. Как вы уже сказали, Firefox действительно делает новый запрос каждый раз, если URL-адрес CSS содержит вопросительный знак (и сервер дает ответ 304 с пустым телом); Firefox не создает новый запрос, если URL-адрес CSS не содержит вопросительный знак. Chromium не создает новый запрос даже с вопросительным знаком. Вероятно, это можно считать ошибкой Firefox. – Jaan 17 January 2014 в 20:47
  • 3
    таким образом, мои друзья не работают. Только если имя файла отличается. Почему так много upvotes? – Gediminas 11 May 2018 в 09:00
  • 4
    Я нашел во многих других местах тот же подход, который был дан в этом ответе, я считаю, что это работало в прошлом, но больше не работает. Если вы находитесь в режиме разработки, лучшим и универсальным подходом является отключение кэширования в браузере с помощью метатег HTML. См. Мой ответ ниже. – ePi272314 30 May 2018 в 04:27

Вы можете отключить кеширование с помощью панели инструментов веб-разработчика Firefox.

0
ответ дан Florent 21 August 2018 в 23:55
поделиться

проверить плагин CSS Cache Buster - это автоматически добавляет случайный номер в URL-адрес таблицы стилей, как и ответ от loler. v = нужно различать каждый раз, когда вам нужен свежий взгляд на css.

http://www.alistercameron.com/2008/09/12/wordpress-plugin-css-cache -buster /

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

-1
ответ дан Innate 21 August 2018 в 23:55
поделиться

Попробуйте следующее:

link href="styles/style.css?=time()" rel="stylesheet" type="text/css"

Если вам нужно что-то после «?» каждый раз, когда страница обращается к ней, она будет работать time(). Если оставить это в своем коде навсегда, это не очень хорошая идея, так как это только замедлит загрузку страницы и, вероятно, не понадобится.

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

-1
ответ дан jmattheis 21 August 2018 в 23:55
поделиться
  • 1
    Так не получается! Только если имя файла отличается от перезагрузки браузера. Или, может быть, с этим намеком только для некоторых браузеров, если он сработал для вас. Downvote – Gediminas 11 May 2018 в 08:58

Это расширение Firefox было единственным решением, с которым я мог бы работать: https://addons.mozilla.org/en-us/firefox/addon/css-reloader/

0
ответ дан Keyslinger 21 August 2018 в 23:55
поделиться

Если вы можете написать php, вы можете написать:

<script src="foo.js<?php echo '?'.mt_rand(); ?>" ></script>
<link rel="stylesheet" type="text/css" href="foo.css<?php echo '?'.mt_rand(); ?>" />
<img src="foo.png<?php echo '?'.mt_rand(); ?>" />

Он всегда будет обновляться!

EDIT: Конечно, это не очень практично для всего веб-сайта, поскольку вы не добавили бы это вручную для всего.

9
ответ дан Mageek 21 August 2018 в 23:55
поделиться
  • 1
    Простой и работает (+1). – Jose Manuel Abarca Rodríguez 6 April 2018 в 21:17
  • 2
    Так не получается! Только если имя файла отличается от перезагрузки браузера. Или, может быть, с этим намеком только для некоторых браузеров, если он сработал для вас – Gediminas 11 May 2018 в 08:59

Убедитесь, что этого не происходит из вашего DNS. Например, Cloudflare имеет его, где вы можете включить режим разработки, где он принудительно очищает ваши таблицы стилей и изображения, поскольку Cloudflare предлагает ускоренный кеш. Это отключит его и заставит его обновлять каждый раз, когда кто-то посещает ваш сайт.

0
ответ дан Sean 21 August 2018 в 23:55
поделиться

Правильный ответ выше. Если, однако, вы хотите периодически перезагружать кеш, и вы используете Firefox, инструменты веб-разработчика (в пункте меню «Инструменты» по состоянию на ноябрь 2015 года) предоставляют параметр «Сеть». Это включает кнопку перезагрузки. Выберите перезагрузку для сброса кэш-памяти.

0
ответ дан Steve Cooke 21 August 2018 в 23:55
поделиться
0
ответ дан Michael Mulikita 4 November 2018 в 21:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: