Здравствуйте. Извиняюсь, если я не точно формулирую вопрос, потому что если бы я знал как его формулировать точно, нашел бы в тырнете.
Вопрос касается методики обновления приложения работающего на Ajax. Без F5(обновления), а так же
вообще без перезагрузки окна.
Существует методика обновления JS, CSS, файлов основанное на добавлении к параметрам запроса версии, например метки времени файла. Данная метка генерируется скриптом. Браузер воспринимает ситуацию так, что начинает перезагружать файл, тем самым он обновятся, при этом не факт что внутри файла были обновления.
К примеру такая система обновления у vk.com и хабрахабра. Вот и у меня при слиянии файлов получается что-то вроде этого:
<link rel="stylesheet" type="text/css" href="/assets/style-e4201d5d.css?1346065709" /><br>
<script type="text/javascript" src="/assets/script-0-d4ccd02d.js?1346069479"></script><br>
Все оно безболезненно обновляется при F5 (обновление), и
без него. Но при работе через Ajax после обновления приложения возникают проблемы работы. Возникает вопрос как обновить приложение. Ответ на то, как это делать с
CSS файлами я
нашел, и соотвественно я его просто реализую и все. Остается вопрос, что делать с работающим JavaScript.
Вопрос:
Как обновить JavaScript динамически? Если обновляться динамически по примеру CSS, то будут ли возникать конфликты работы? Как выгрузится старый JS из памяти? Как оно будет происходить, ведь фактически я заменяю исполняемый код на лету. Вот такой список вопросов, к тем кто может быть знает.
Спасибо.
ЗЫ: (
UPD 2012.08.28 12:00)
В результате я очень странную проблему нашел. Я смог обновить тэг script, но потом я не смог его найти в дереве, очень странно, ведь я делал просто реплейс. В результате мое решение это перезапустить страницу на том же адресе, на котором до этого находился ajax скрипт. Немного не кошерно, но зато гарантировано и практически не мешает пользователю — так как он оказывается на той же странице на которую перешел при последнем ajax запросе.
Обновление стилей CSS я сделал двух этапной — от двух действий пользователя. На первом этапе происходит загрузка нового CSS, на втором этапе происходит удаление старого CSS, для оптимизации рендеринга. Таки образом (если использовать replace) экран не будет дергаться из-за ситуации, что старый CSS уже удален, а новый еще не подгрузился.