Как решить проблему с файлами JavaScript, подаваемыми от кэша?

Когда серверный код обновляется (связанный с JavaScript), старые файлы JavaScript подаются от кэша.

Мне нужно решение, где старые файлы JavaScript обновляются к их более новым версиям. Кэш браузера (связанный с JavaScript) должен делаться недействительным, после того как файлы на сервере обновляются.

У меня есть следующее решение этой проблемы.

var randomnumber=Math.floor(Math.random()*10000);

var scriptfile='http://www.whatever.com/myjs.js?rnd='+randnumber;

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

7
задан Sarfraz 2 August 2010 в 08:55
поделиться

2 ответа

Большинство сайтов, включая 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';

но это потребует сценариев на стороне сервера и может оказаться слишком дорогостоящим для выполнения на каждом этапе. запрос страницы.

15
ответ дан 6 December 2019 в 08:13
поделиться

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

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), вы можете заменить его номером версии, чтобы он обновлялся при регистрации нового скрипта.

7
ответ дан 6 December 2019 в 08:13
поделиться
Другие вопросы по тегам:

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