[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Принудительное обновление файла js
zvezda_t
Всем привет!

У меня такая ситуация:
В файле js используется формула для расчета параметров.
С определенного числа, формула должна измениться.

Я изменяю формулу в своем файле js.
Но этого оказывается мало(( У некоторых пользователей кэшируется старая версия файла js. И расчет идет по старой формуле. А этого допустить никак нельзя.
Данные должны приходить с определенного числа строго по новой формуле.

Как быть? Как мне заставить пользователей обновить страничку, чтобы обновился файл js?

У меня была мысль переименовать файл js. Тогда уж точно новый загрузиться - ведь так? Или я не права?
Еще не факт что сам шаблон html(в котором указано имя нового файла js) у них обновиться, да? Или должен? Я запуталась...

Пожалуйста, подскажите, как гарантировано обновить js?

_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
kaww
можно добавить гет-параметр и менять его с новой версией файла:
<script src="scrip.js?v=1.1"></script>
zvezda_t
kaww, извини, так ни разу еще не делала, поэтому спрошу, можно?
Этот параметр будет передаваться в файл js? Как его там получить?

А сам html с вызовом
<script src="scrip.js?v=1.1"></script>

у меня точно обновиться? Он не захэшируется?


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
kaww
zvezda_t, ваш javascript никак его не получит. Он нужен для того, чтобы браузер не брал файл из кэша если значение этого параметра изменилось.
Цитата (zvezda_t @ 11.07.2014 - 04:28)
Он не захэшируется?

конечно закэшируется, если так предписывают заголовки ответа (у вас, судя по-всему, js кэшируется раз возникла такая проблема ), но если изменить, например, на v=1.2, то браузер уже не будет брать файл из соего кэша (т.к. по сути это уже совсем другой файл) и запросит его с сервера.
zvezda_t
kaww, спасибо большое. Теперь ясно стало.

Извини, но я спрашивала не про js, а про html. html - файл 100% будет содержать имя нового файла js? Или я глупости спрашиваю? unsure.gif


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
kaww
вот статья которая должна помочь немного упорядочить знания по кэшированию в http http://webo.in/articles/all/http-caching/
GET
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
ABC, спасибо)
Извини, у тебя тоже спрошу(только не ругайтесь rolleyes.gif ): а сам шаблон html - он не кэшируется?
У пользователя страница точно с новыми названиями файлов отобразиться?

_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
GET
Цитата
Извини, у тебя тоже спрошу(только не ругайтесь   ): а сам шаблон html - он не кэшируется?


Если страница вида mysite.ru/test.html то вероятнее всего она закешируется, думаю выход либо запретить кешировать html (думаю так лучше не делать, для стационарных страниц), либо, как я писал выше добавлять версию странице:

mysite.ru/test.html?41

но нужно продумать механизм добавления версий, иначе получится д****о не очень, устанешь версии писать, будешь ошибаться и т.д.

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

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
FatCat
Пример моей реализации ротации джаваскриптового файла. http://vesvalo.net/
В низу средней колонки список посетителей за сутки; в середине левой колонки фраза про включенные счетчики, по клику разворачивается огромный блок счетчиков.
Это всё в джаваскриптовом файле, который меняется каждые 15 минут.

Принцип простой.
Самой странице сделан запрет кеширования. Да и что там кешировать, там 15 Кб всего. Всё кеширование в джаваскриптовых файлах.

Пример имени файла: 1405061045.cache.mcount.js
10 цифр в начале имени файла - time() на момент генерации файла.

При каждой генерации страницы считывается имя файла кеша и из имени берется время его генерации. Если прошло больше 15 минут - файл удаляется и создается новый, с новым именем от текущего значения time().

_____________
Бесплатному сыру в дырки не заглядывают...
zvezda_t
ABC, нет) шаблон создается с помощью php.
Тогда, все ок, да?


FatCat, спасибо) попробую разобраться)


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
zvezda_t
В итоге, сделала так:
Супер работает) Я такая радая!))) Спасибо, большое, что научили :)

<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
Цитата (zvezda_t @ 15.07.2014 - 07:06)
сделала так

Версию файла в имя файла?
user posted image

_____________
Бесплатному сыру в дырки не заглядывают...
inpost
zvezda_t
Открываешь в офф-лайне - сайт открылся. Значит загрузилась старая версия сайта. У меня работает через двусторонний ключ. Открывается страница, в <head> прописан ключ на JS, далее Аякс запрос на сервер, сервер возвращает новый ключ. Если ключи не совпадают, то страницу просим или заставляем перегрузить. Теперь заливая файлы новые на сервер я лишь меняю ключ в HTML и ключ на сервере.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
McLotos
inpost
угу, а ещё можно прикрутить Диффи-Хелмана =)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.