#angular #single-page-application
#angular #одностраничное приложение
Вопрос:
У меня есть одностраничное приложение angular2. Я хочу предложить пользователю перезагрузить страницу, когда я выложу новую версию на рабочий сервер. Я слышал о AppCache. Я слышал о сервисных работниках.
Какова принятая практика для этой операции?
Через какой процесс вы проходите, чтобы обнаружить изменение, а затем принудительно обновить?
Есть ли что-то уже в браузере, которое поддерживает это?
Спасибо.
Комментарии:
1. Вы хотите динамически проверять наличие новой версии или просто убедиться, что она загружается при загрузке страницы? Что бы вы ни делали, это должно быть прозрачно для пользователя. Мы используем перебор кэша Grunt для добавления случайных строк к именам файлов JS.
2. @isherwood я не знаю, действительно ли это решение имеет наибольший смысл. По сути, я хочу обнаружить, что JS приложения изменился, а затем запросить пользователя о том, что что-то изменилось, и предложить им обновить. Перебор кэша Grunt в этом не поможет.
3. Ну, вам нужно будет иметь какой-то механизм для указания обновленных файлов, поэтому очистка кэша, вероятно, все еще является хорошей идеей (и гарантирует текущую версию при загрузке страницы). Затем вам придется периодически опрашивать сервер для проверки версий. Если у вас нет приложения, которое пользователи, как правило, держат открытым в течение нескольких дней подряд, это кажется чрезмерным.
4. @isherwood Спасибо за ответ. У меня есть приложение, которое пользователи могут оставлять открытым в течение нескольких дней. В этом проблема. Есть ли что-нибудь в платформе javascript или платформе браузера, которая поддерживает подобные вещи?
5. Конечно. Я описал один подход, использующий поиск кэша и периодический опрос сервера. Я предлагаю вам отредактировать свой вопрос, чтобы задать что-то более конкретное. Как бы то ни было, это несколько не по теме, поскольку слишком широко и основано на мнениях.
Ответ №1:
Я не знаю, существует ли стандартная практика, но вот как я сделал это один раз, успешно:
При развертывании версии 123 я гарантирую, что основной index.html файл содержит эту строку:
<script>var MYAPP_VERSION=123;</script>
и что серверная часть отправляет заголовок в качестве заголовка всех ответов на запросы AJAX x-myapp-version=123
.
В приложении (angular1, но вы можете сделать что-то подобное с angular 2), каждый раз, когда я получаю ответ AJAX от серверной части, я проверяю, что версия в заголовке идентична версии в MYAPP_VERSION.
Если версии отличаются, это означает, что была развернута новая версия, но пользователь все еще использует старую версию (т. Е. Не Обновил главную страницу). Затем я показываю предупреждающее сообщение или всплывающее окно (или принудительно обновляю), чтобы убедиться, что страница обновлена. Это в сочетании с версией хэша в файлах и шаблонах JS (или правильной конфигурацией кэша) позволяет убедиться, что пользователь получает новые версии файлов.
Комментарии:
1. Спасибо за предложение. Я думал об этом, но это кажется довольно сложным, и мне было интересно, существует ли стандарт defacto для этого в Javascript.
2. Привет, у вас есть какие-либо новые мысли по этому вопросу. Я обнаружил, что все еще не могу найти удовлетворительный ответ. Я задал свой вопрос здесь с новой информацией softwareengineering.stackexchange.com/questions/423068 /…