Файлы .js кэшируются? - PullRequest
       3

Файлы .js кэшируются?

13 голосов
/ 24 сентября 2011

Я недавно создал веб-сайт и внес изменения в файл .js, но когда я удаляю файл .js с FTP-сервера и загружаю новый, новый файл не отображается на сайте. Я проверил исходный код за файлом .js на веб-сайте, и он не прав, он показывает исходный файл, а не новый, хотя старый уже нет. Это потому, что мой браузер кэшировал файл .js?

Примечание: у меня есть этот источник

<meta http-equiv="cache-control" content="no-cache" />

на моей странице, чтобы запретить браузеру кэшировать мою страницу, и я знаю, что это работает с HTML, но при наличии этого источника файлы ресурсов все еще кэшируются?

У меня нет этой строки кода на других моих страницах, только на моей домашней странице, но файл .js по-прежнему упоминается на других страницах, так что, возможно, именно так он кэшируется?

Кроме того, есть ли способ проверить кеш вашего браузера? Я использую хром.

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

Ответы [ 3 ]

15 голосов
/ 24 сентября 2011

Я не уверен, что тэг no-cache meta - это путь. Он сводит на нет все кэширование и добро побеждает назначение быстро доступных страниц.

Кроме того, AFAIK, тег meta работает для каждой страницы, поэтому, если у вас есть страница без нее, которая ссылается на ваш JS - она ​​будет кэширована.

Широко приемлемый способ предотвращения кэширования файлов JS (и, опять же, CSS) - дифференцировать запросы к ним:

Скажем, у вас есть:

<script type=”text/JavaScript” src=”somescript.js″></script>

этот будет кешировать его (если только не присутствует вышеуказанный метатег.

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

<script type=”text/JavaScript” src=”somescript.js?some-randomly-generated-string″></script>

То же самое касается CSS.

Если бы вы использовали какую-то сеть JS - это позаботилось бы об этом, если бы вы дали ей какую-то опцию конфигурации без кэширования.

Вы, конечно, можете сделать это и на чистом JS. Некоторая строка типа Date является опцией.


Теперь обычно вы не хотите отменять все кэширование, поэтому способ сделать это - добавить параметр версии в ваш URL:

<script type=”text/JavaScript” src=”somescript.js?version=1.0.0″></script>

и управляйте своими сценариями оттуда.

EDIT

Нет необходимости в дополнительном расширении. Если я не ошибаюсь, «Инструменты разработчика Chrome» встроены во все версии Chrome (в бета-версии и dev, конечно) и доступны при нажатии Ctrl-Shift-I . Там на вкладке «Сеть» вы можете увидеть все ваши запросы, там контент и заголовки.

2 голосов
/ 24 сентября 2011

Да.Ресурсы все еще кешируются.На мой взгляд, хорошей практикой, чтобы избежать этого, является версия файлов ресурсов в формате url? Parameter = value.

Например, вы должны установить ulr для вашего файла js или css следующим образом: <...src = "script.js? v = 1" ... /> <... href = "style.css? v = 1 .. /> и когда происходят какие-либо изменения, просто измените v = 1 на v = 2 ...

, который не повлияет на ваш код, но заставит ваш браузер / прокси и т. Д. Повторно загрузить ресурс

0 голосов
/ 24 сентября 2011

Используйте инкогнито экземпляр chrome (ctrl + shift + n), чтобы проверить источник, этот режим не будет использовать никаких кэшированных файлов.При этом вы можете проверить, кэшируется ли ваш файл на стороне клиента.

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

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

Редактировать (вопрос изменен):

Используйте это расширение chrome , чтобы проверить заголовки, отправляемые вместе с вашими файлами .js.Вероятно, существует набор заголовков элемента управления кэшем, который указывает chrome кэшировать ресурс.

Если вы используете Apache, вы можете изменить это поведение, используя файл .htaccess.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...