169 похожих чатов

Коллеги, вопрос не столько про Vue, а в целом про

spa web apps.
У нас регулярно катятся релизы фронта и как обеспечить чтобы у пользователя который заходил на сайт допустим неделю назад и у него старая версия - закeшированных данных в LS и самих скриптов.
Вот он открывает сайт начинает ходить а бэкенд за неделю тоже обновился и возвращает какие-то данные новые, или чего-то не возвращает.
Соответственно у пользователя возникает ошибка на клиенте, два вопроса:
1) если он просто обновит страницу при возникновении ошибки у меня подтянется новая версия скриптов а то что в LS лежит не будет соответствовать новой версии. Как сделать какой-то сигнал коду фронтенд-приложения что надо весь кэш почистить и подтянуть по новой?
2) можно ли как-то не дожидаться того что пользователь будет обновлять страницу за ошибки, а прямо в runtime работающего фронтен-приложения понять что код/кеш протух и надо как-то всё обновить?

Возможно ответом на это является сервис worker но я так понимаю что это только часть решения.

3 ответов

7 просмотров

Я у себя использую две стратегии: 1) При сборке бандла плагином формируется хэш всех файлов и кладётся рядом с остальной статикой. Дальше фронтенд при каждом переходе по страницам шлёт запрос для получения этого хэша. Если запрос вернул значение хэша, отличное от того что у нас было - значит что-то поменялось и вместо подтверждения перехода я делаю window.location = to.fullPath 2) При сборке приложения в него вшивается текущий номер версии. И nginx, через который и раздаётся статика, и проксируются запросы к бекенду, при каждом ответе от бекенда добавляет хедер с текущей версией. На стороне приложения добавляется интерцептор всех ответов, где проверяется хедер с версией. Если она отличается от той версии, что вшита в текущую сборку - значит вышла новая версия. Тогда показываем пользователю всплывашку "обнови страницу плиз"

Mikhail- Автор вопроса
Kirill 🍅 Romanov
Я у себя использую две стратегии: 1) При сборке ба...

Кирилл, спасибо за подробный ответ! Второй вариант мне нравится больше. Сейчас прикидываю всё ли у нас есть чтобы его реализовать

Mikhail
Кирилл, спасибо за подробный ответ! Второй вариант...

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

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта