Наверное, вопрос глупый, но актуальный. Страница загружается и несколько часов целиком не перезагружается, только AJAX.
Но что делать, если нужно обновить скрипт? Я сейчас делаю так:
В ответе сервера ajax встроена текущая версия скрипта. Если она не сходится с прописанной в самом скрипте, то перенаправляю на страницу вида index.php?v2
Чувствую, что делаю фигню. Ведь при изменении нужно править ТРИ файла: скрипт, php (который запрашиваю по ajax) и клиентскую страницу, где прописываю
Хм, мне вот ОЧЕНЬ интересно, что за скрипт который у вас полиморфирует каждые несколько часов? Может проще вынести какие-то настройки в переменные и при необходимости изменения поведения просто присылать аяксом новые настройки в виде json?
ThunderCat, я неопытный разработчик в js.
А приложение должно работать правильно. Это на случай, если баг выявлен в процессе пользования и его нужно срочно исправить у всех.
Vladimir Zharinov, Как написал Сергей Соколов пару часов не критично, а при смене версии пишете в качестве гет параметра номер версии, и при новом заходе все пользователи получают свежий релиз. Как вариант, если вы ОЧЕНЬ переживаете за критичность работы - при смене версии посылать всем дополнительный параметр в данных - необходимость рефреша и сделать .reload() страницы. Но имхо это не критично, если это не какая-то дыра в интерфейсе банка или подобный баг.
Варианты:
1. не париться. Посидит несколько часов с устаревшей версией - разве это критично?
2. если изменения в новой версии идут в компании с breaking changes в backend, то есть смысл версии API закладывать в пути: скрипт версии x.y будет обращаться к бэкенду по адресу api/x.y/method Так параллельно смогут жить и работать несколько версий скрипта+API.
3. нынешний вариант не так и плох для некоторых случаев. Особенно, если ajax запросы в меру регулярны.
4. на таймер раз в X секунд поставить вызов серверного метода проверки версии, и при обнаружении обновления сохранять данные и перегружать страницу.
Vladimir Zharinov, обычно дописывают к загружаемому скрипту случайную строку, дату-время, timestamp миллисекундный. Правда, это совсем отключит кэширование скрипта:
var el = document.createElement('script');
script.src = "build.js?" + (new Date()).getTime();
document.getElementsByTagName('head')[0].appendChild(el);
п.4 - ГК.
Уж тогда рандомно менять гет-параметр в имени скрипта, запрещая т.о. его кеширование. Тоже не айс, но всё же лучше - скрипт будет грузиться всегда заново с сервера, но не таймерные операции.
Вы можете отдавать JS скрипт с помощью PHP. Подумайте об этом. <script src='js/scripts.php'></script>
Но не забудьте верно установить хедеры. Кроме того в них же можно установить время кеширования скрипта (например вообще его отключить).
Если же случилась смена версии, то просто делаете перезагрузку страницы.
Посмотрите RequireJS, с его помощью можно контролить не только скрипты
+ можно такую схемку:
<script src='js/scripts.php' id="dataID"></script>
и прописать небольшую функцию которая будет брать хэш / get / post параметр и по нему обновлять скрипт найдя его по ID
PS опять же можно использовать id можно использовать свободный атрибут - не принципиально
Сергей Соколов, а сори) вопрос я понял. Так тут и суть что кто сидит в онлайне все ровно получает ответ от сервера. И в зависимости где происходит проверка так и ставить контроллер.
Условно:
user отправляет запрос и получает ответ что его версия в утиль, отправляет запрос на новую версию
server присылает обновленный линк / данные - вообщем что именно нужно обновить - все, при получении ответа, действуем! :)
BitRouter, а, вы имеете в виду hot reload модулей? Приведите минимальный пример кода, пожалуйста.
Например, используется модуль jquery: "paths": { "jquery": "lib/jquery-2.2.4.min"} И вдруг, после обеда, приспичило его обновить - по таймеру или по какому-то событию, которое пришло из очередной асинхроты.