Skip to content

StudyGe 1.7.0

Choose a tag to compare

@eugene-chernyshenko eugene-chernyshenko released this 11 Sep 18:57
· 12 commits to main since this release

Исправлено залипание старой версии в браузере.

Играть: https://eugene-chernyshenko.github.io/studyge/

В чём было дело

GitHub Pages отдаёт каждый файл с Cache-Control: max-age=600 и не даёт менять заголовки — это проверено запросами к боевому сайту. Файлы сборки такое переживают, у них хеш в имени. А data/*.json и флаги называются одинаково от релиза к релизу, поэтому браузер мог взять новый код и старый manifest.json — и новые наборы просто не появлялись.

Что сделано

Версия в адресе данных. Версия из package.json попадает в сборку и добавляется ко всем адресам данных: data/manifest.json?v=1.7.0. Новый релиз — новые адреса, смешать старые данные с новым кодом теперь невозможно.

Страница сама замечает новый деплой. Сборка кладёт рядом version.json, приложение запрашивает его с cache: 'no-store' — это обходит десятиминутный кеш целиком — при запуске, при возврате на вкладку и раз в пять минут. Если на сервере другая версия, в меню появляется кнопка «Обновить».

Баннер показывается только в меню: в раунде он перекрывал бы «Подтвердить». Проверено попаданием в кнопку — под её центром именно кнопка, а не баннер.

Что осталось непокрытым

Дольше десяти минут устаревшим может оставаться только сам index.html — на это с GitHub Pages повлиять нельзя никак. Но благодаря версиям в адресах это теперь означает «согласованная старая версия», а не «новый код со старыми данными».

И ещё: те, кто сейчас сидит на 1.6.0, кнопки обновления не увидят — в их сборке её ещё нет. Они получат новую версию, когда протухнет index.html, то есть в пределах десяти минут. Начиная с 1.7.0 механизм работает.