Обеспечение согласованности на стороне клиента при развертывании веб-сайтов - PullRequest
0 голосов
/ 16 февраля 2019

Предположим, у меня есть веб-сайт.Как и многие другие, он обслуживает HTML-страницы, которые ссылаются на файлы CSS и JavaScript.Меня беспокоит следующий сценарий, когда я развертываю новую версию:

  1. Клиент загружает /index.html.
  2. Мое атомарное, бесшовное развертывание происходит.
  3. клиент загружает /app.js, на который ссылается HTML-страница, загруженная на шаге 1.

Теперь клиент имеет несовместимое представление моего сайта: его браузер загрузил старый версия /index.html и новая версия /app.js.Тогда:

Ошибки следуют.Клиент гневно берет свои доллары в другом месте.

Каков наилучший способ избежать этого сценария и обеспечить последовательность на стороне клиента?Я хотел бы гарантировать, что все клиенты увидят либо старую, либо новую версию сайта, а не гибрид.

1 Ответ

0 голосов
/ 08 марта 2019

Мне не удалось найти много информации об этой проблеме.Похоже, что в готовых решениях по развертыванию нет ни одной стратегии, ни какой-либо дискуссии в Интернете.

Лучший из увиденных мной подходов сводится к нескольким ключевым идеям:

  1. Статические ресурсы, на которые ссылаются ваши HTML-страницы, являются неизменными и вечными;после развертывания /assets/app.js вы никогда не сможете его изменить.
  2. Развертывание новых версий своих ресурсов с использованием явных номеров версий;версия 23 вашего HTML-сайта должна содержать ссылки, скажем, /assets/app-v23.js.
  3. Если ваше развертывание не является полностью атомарным, развертывание осуществляется поэтапно.На первом этапе разверните все новые версии ваших статических активов по всему флоту.На них пока не будут ссылаться никакие HTML-страницы, так как они имеют новый номер версии.На втором этапе разверните все новые версии HTML, ссылаясь на новые ресурсы.

Источники:

...