zvezda_t
11.07.2014 - 07:58
Всем привет!
У меня такая ситуация:
В файле js используется формула для расчета параметров.
С определенного числа, формула должна измениться.
Я изменяю формулу в своем файле js.
Но этого оказывается мало(( У некоторых пользователей кэшируется старая версия файла js. И расчет идет по старой формуле. А этого допустить никак нельзя.
Данные должны приходить с определенного числа строго по новой формуле.
Как быть? Как мне заставить пользователей обновить страничку, чтобы обновился файл js?
У меня была мысль переименовать файл js. Тогда уж точно новый загрузиться - ведь так? Или я не права?
Еще не факт что сам шаблон html(в котором указано имя нового файла js) у них обновиться, да? Или должен? Я запуталась...
Пожалуйста, подскажите, как гарантировано обновить js?
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
можно добавить гет-параметр и менять его с новой версией файла:
<script src="scrip.js?v=1.1"></script>
zvezda_t
11.07.2014 - 08:28
kaww, извини, так ни разу еще не делала, поэтому спрошу, можно?
Этот параметр будет передаваться в файл js? Как его там получить?
А сам html с вызовом
<script src="scrip.js?v=1.1"></script>
у меня точно обновиться? Он не захэшируется?
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
zvezda_t, ваш javascript никак его не получит. Он нужен для того, чтобы браузер не брал файл из кэша если значение этого параметра изменилось.
Цитата (zvezda_t @ 11.07.2014 - 04:28) |
Он не захэшируется? |
конечно закэшируется, если так предписывают заголовки ответа (у вас, судя по-всему, js кэшируется раз возникла такая проблема ), но если изменить, например, на v=1.2, то браузер уже не будет брать файл из соего кэша (т.к. по сути это уже совсем другой файл) и запросит его с сервера.
zvezda_t
11.07.2014 - 08:55
kaww, спасибо большое. Теперь ясно стало.
Извини, но я спрашивала не про js, а про html. html - файл 100% будет содержать имя нового файла js? Или я глупости спрашиваю?
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
вот статья которая должна помочь немного упорядочить знания по кэшированию в http
http://webo.in/articles/all/http-caching/
zvezda_t
Цитата |
У некоторых пользователей кэшируется старая версия файла js. И расчет идет по старой формуле. А этого допустить никак нельзя. |
Обычно разрабочики специально делают так, чтоб эти файлы кешировались у юзера, не только js, но и css ...jpg, html. Какой смысл их постоянно качать по сети? Забивать трафик, если они не изменились? Но для того, чтоб отличить старый файл от нового, создают версионность, например почитать можно здесь:
http://javascript.ru/optimize/cache-versioningспособов как сделать много, я например просто цепляю номер версии (для современных браузеров этого достаточно):
style.css?1
style.css?2
...
style.css?56
по мере надобности конечно, ну и все стационарные файлы кэширую на разные сроки (и отдаю их через nginx), версии проставляю динамически специально созданным скриптом.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
zvezda_t
11.07.2014 - 09:38
ABC, спасибо)
Извини, у тебя тоже спрошу(только не ругайтесь
): а сам шаблон html - он не кэшируется?
У пользователя страница точно с новыми названиями файлов отобразиться?
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Цитата |
Извини, у тебя тоже спрошу(только не ругайтесь ): а сам шаблон html - он не кэшируется? |
Если страница вида mysite.ru/test.html то вероятнее всего она закешируется, думаю выход либо запретить кешировать html (думаю так лучше не делать, для стационарных страниц), либо, как я писал выше добавлять версию странице:
mysite.ru/test.html?41
но нужно продумать механизм добавления версий, иначе получится д****о не очень, устанешь версии писать, будешь ошибаться и т.д.
В той ссылке выше есть способ, когда это делает htaccess, но каждый сам решает... кто-то еще предлагает использовать filemtime, но по мне дак это тяжело для файловой системы.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
FatCat
11.07.2014 - 11:10
Пример моей реализации ротации джаваскриптового файла.
http://vesvalo.net/В низу средней колонки список посетителей за сутки; в середине левой колонки фраза про включенные счетчики, по клику разворачивается огромный блок счетчиков.
Это всё в джаваскриптовом файле, который меняется каждые 15 минут.
Принцип простой.
Самой странице сделан запрет кеширования. Да и что там кешировать, там 15 Кб всего. Всё кеширование в джаваскриптовых файлах.
Пример имени файла:
1405061045.cache.mcount.js10 цифр в начале имени файла - time() на момент генерации файла.
При каждой генерации страницы считывается имя файла кеша и из имени берется время его генерации. Если прошло больше 15 минут - файл удаляется и создается новый, с новым именем от текущего значения time().
_____________
Бесплатному сыру в дырки не заглядывают...
zvezda_t
11.07.2014 - 11:20
ABC, нет) шаблон создается с помощью php.
Тогда, все ок, да?
FatCat, спасибо) попробую разобраться)
_____________
Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
zvezda_t
15.07.2014 - 08:06
В итоге, сделала так:
Супер работает) Я такая радая!))) Спасибо, большое, что научили :)
<script type="text/javascript" language="javascript" src="<?=base_url();?>asset/js/<?=version_file('js','my_fun1.js')?>" ></script>
if ( ! function_exists('version_file'))
{
function version_file($type,$name)
{
$version['js'] = array('my_fun1.js' => '1.1',
'my_fun2.js' => '1.4',
'my_fun3.js' => '1.1');
if(!empty($version[$type][$name]))
$v = $name.'?v='.$version[$type][$name];
else
$v = $name;
return $v;
}
}
_____________
Что ты сделал сегодня - для завтра?"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
FatCat
15.07.2014 - 16:01
Цитата (zvezda_t @ 15.07.2014 - 07:06) |
сделала так |
Версию файла в имя файла?
_____________
Бесплатному сыру в дырки не заглядывают...
inpost
15.07.2014 - 20:07
zvezda_tОткрываешь в офф-лайне - сайт открылся. Значит загрузилась старая версия сайта. У меня работает через двусторонний ключ. Открывается страница, в <head> прописан ключ на JS, далее Аякс запрос на сервер, сервер возвращает новый ключ. Если ключи не совпадают, то страницу просим или заставляем перегрузить. Теперь заливая файлы новые на сервер я лишь меняю ключ в HTML и ключ на сервере.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
McLotos
15.07.2014 - 21:01
inpost
угу, а ещё можно прикрутить Диффи-Хелмана =)
_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.