Чистое развертывание приложения PJAX или Turbolinks

Если у меня есть приложение, которое использует PJAX или Turbolinks, то я вижу проблему, когда новый код развертывается на сервере — скажем, Heroku. Проблема в том, что пользователи, обращающиеся к приложению, продолжат использовать Javascript из предыдущей версии приложения (поскольку он уже загружен в браузер), но получат HTML-страницы из новой версии. Иногда новый HTML-код предполагает, что загружен новый Javascript, поэтому все работает неправильно.

Замечали ли другие эту проблему? Что вы делаете по этому поводу? Похоже, что это будет распространенной проблемой и для одностраничных приложений Javascript (например, основанных на Backbone и Ember). Meteor, по крайней мере, плавно обновляет код в клиенте, чтобы решить эту проблему.


person Chris    schedule 28.02.2013    source источник


Ответы (3)



взяв в качестве примера pivotaltracker, они проверяют клиентское соединение и заставляют пользователя перезагружать свои клиенты, если появляется новая версия.

пока вы не обеспечиваете обратную совместимость в своем приложении, вы ничего не можете сделать.

person phoet    schedule 28.02.2013

Если вы используете Pjax, вы можете добавить

<meta http-equiv="x-pjax-version" content="v123">

к вашему заголовку. Вы можете использовать определенное сервером значение для атрибута содержимого, а затем перед развертыванием просто убедитесь, что это значение обновлено. После его развертывания последующие запросы Pjax увидят, что этот заголовок был обновлен, отменят запрос Ajax и вызовут полную перезагрузку страницы.

Для Turbolinks 5 вы можете добавить data-turbolinks-track="reload" к ссылкам на скрипт и таблицу стилей в заголовке. Turbolinks будет следить за изменениями в этих файлах при каждом запросе. Затем при развертывании, как и Pjax, он запросит полную перезагрузку страницы.

Классические Turbolinks просто требуют вместо этого атрибута data-turbolinks-track.

Вы можете прочитать больше и увидеть другие функции на странице GitHub Pjax: https://github.com/defunkt/jquery-pjax или Turbolinks: https://github.com/turbolinks/turbolinks.

Для Turbolinks Classic: https://github.com/turbolinks/turbolinks-classic.

person josephxanderson    schedule 22.09.2016