Когда серверный код обновляется (связанный с JavaScript), старые файлы JavaScript подаются от кэша.
Мне нужно решение, где старые файлы JavaScript обновляются к их более новым версиям. Кэш браузера (связанный с JavaScript) должен делаться недействительным, после того как файлы на сервере обновляются.
У меня есть следующее решение этой проблемы.
var randomnumber=Math.floor(Math.random()*10000);
var scriptfile='http://www.whatever.com/myjs.js?rnd='+randnumber;
Но я должен очистить кэш только, когда существует некоторое обновление на файлах JavaScript не на каждой перезагрузке страницы.
Большинство сайтов, включая Stack Overflow, используют для этого номер редакции из своей системы контроля версий:
var scriptfile='http://www.whatever.com/myjs.js?rnd='+revision_number;
всякий раз, когда редакция изменяется, браузер указывает на «новый» файл JavaScript.
Вы также можете сделать это вручную, указав номер версии где-нибудь в центральном месте и добавив этот номер версии к каждому вызову скрипта. Когда вы обновляете часть JavaScript, вы просто увеличиваете номер версии.
Третий подход заключается в проверке времени «последнего изменения» включенных вами файлов JavaScript и построении на его основе метки времени:
var scriptfile='http://www.whatever.com/myjs.js?version=20100803';
но это потребует сценариев на стороне сервера и может оказаться слишком дорогостоящим для выполнения на каждом этапе. запрос страницы.
Вместо использования случайного числа используйте номер версии или отметку времени обновления, чтобы получилось:
var script = 'http://mysite.com/the_script.js?2010-08-02';
// or
var script = 'http://mysite.com/the_script.js?v1.20';
Если вы не хотите обновлять это вручную, вы можете использовать сценарий make
, который ищет и заменяет тег с номером версии:
var script = 'http://mysite.com/the_script.js?{{script_update_date}}';
// have a shell script find and replace the above {{ }} tag with the date or such
// when deploying to production
Или, если ваша система контроля версий использует его (например, SVN), вы можете заменить его номером версии, чтобы он обновлялся при регистрации нового скрипта.