Очистить кеш в JavaScript - PullRequest
162 голосов
/ 18 июня 2009

Как очистить кеш браузера с помощью JavaScript?

Мы развернули последний код JavaScript, но не можем получить последний код JavaScript.

От редакции. Этот вопрос частично дублируется в следующих местах, и ответ на первый из следующих вопросов, вероятно, является лучшим. Этот принятый ответ больше не является идеальным решением.

Как заставить браузер перезагружать кэшированные файлы CSS / JS?

Как заставить клиентов обновлять файлы JavaScript?

Динамическая перезагрузка локального источника данных Javascript / данных JSON

Ответы [ 17 ]

185 голосов
/ 02 февраля 2010

Вы можете вызвать window.location.reload (true) , чтобы перезагрузить текущую страницу. Он будет игнорировать любые кэшированные элементы и получать новые копии страницы, CSS, изображений, JavaScript и т. Д. С сервера. Это не очищает весь кеш, но имеет эффект очистки кеша для страницы, на которой вы находитесь.

Тем не менее, ваша лучшая стратегия заключается в создании версии пути или имени файла, как указано в различных других ответах. Кроме того, см. Revving Filenames: не используйте строку запроса по причинам, не использующим ?v=n в качестве схемы управления версиями.

106 голосов
/ 18 июня 2009

Вы не можете очистить кеш с помощью JavaScript. Распространенным способом является добавление номера редакции или последней обновленной метки времени в файл, например:

myscript.123.js

или

myscript.js?updated=1234567890

37 голосов
/ 18 июня 2009

Попробуйте изменить src файла JavaScript? Из этого:

<script language="JavaScript" src="js/myscript.js"></script>

К этому:

<script language="JavaScript" src="js/myscript.js?n=1"></script>

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

18 голосов
/ 12 декабря 2011

Кроме кэширования каждый час или каждую неделю, вы можете кэшировать в соответствии с данными файла.

Пример (в PHP):

<script src="js/my_script.js?v=<?=md5_file('js/my_script.js')?>"></script>

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

<script src="js/my_script.js?v=<?=filemtime('js/my_script.js')?>"></script>
10 голосов
/ 18 июня 2009

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

<?php
echo '<script language="JavaScript" src="js/myscript.js?token='.date('YmdH').'">';
?>

или

<script type="text/javascript" src="js/myscript.js?v=<?php echo date('YmdHis'); ?>"></script>
6 голосов
/ 16 сентября 2015

попробуйте использовать это

 <script language="JavaScript" src="js/myscript.js"></script>

К этому:

 <script language="JavaScript" src="js/myscript.js?n=1"></script>
6 голосов
/ 31 марта 2011

поместите это в конец вашего шаблона:

var scripts =  document.getElementsByTagName('script');
var torefreshs = ['myscript.js', 'myscript2.js'] ; // list of js to be refresh
var key = 1; // change this key every time you want force a refresh
for(var i=0;i<scripts.length;i++){ 
   for(var j=0;j<torefreshs;j++){ 
      if(scripts[i].src && (scripts[i].src.indexOf(torefreshs[j]) > -1)){
        new_src = scripts[i].src.replace(torefreshs[j],torefreshs[j] + 'k=' + key );
        scripts[i].src = new_src; // change src in order to refresh js
      } 
   }
}
5 голосов
/ 22 июля 2011

или вы можете просто прочитать файл js на сервере с помощью file_get_contets, а затем добавить в заголовок echo содержимое js

5 голосов
/ 02 сентября 2009

Вот фрагмент того, что я использую для моего последнего проекта.

с контроллера:

if ( IS_DEV ) {
    $this->view->cacheBust = microtime(true);
} else {
    $this->view->cacheBust = file_exists($versionFile) 
        // The version file exists, encode it
        ? urlencode( file_get_contents($versionFile) )
        // Use today's year and week number to still have caching and busting 
        : date("YW");
}

С точки зрения:

<script type="text/javascript" src="/javascript/somefile.js?v=<?= $this->cacheBust; ?>"></script>
<link rel="stylesheet" type="text/css" href="/css/layout.css?v=<?= $this->cacheBust; ?>">

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

Кроме того, это обеспечивает очистку кэша при каждой загрузке страницы в среде разработки, поэтому разработчикам не нужно беспокоиться об очистке кэша для любых ресурсов (вызовов javascript, css, ajax и т. Д.).

4 голосов
/ 02 мая 2014

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

 <script src="js/myscript.js?rev=<?php echo time();?>"
    type="text/javascript"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...