awesome-everything EN
↑ Обратно к восхождению

Очереди, потоки, события

UX при eventual consistency: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту — optimistic UI, read-your-own-writes, pending-состояния, идемпотентные retry и conflict resolution над асинхронным бэкендом.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Каждый отражает UX-решение, которое ты принимаешь над реальным асинхронным бэкендом — не определение для заучивания, а компромисс, который надо взвесить, пока consistency-окно растягивается под нагрузкой.

Цель

Убедись, что связываешь consistency-окно, optimistic UI, read-your-own-writes, честные pending-состояния, идемпотентные retry и conflict resolution — тот синтез, к которому вёл урок.

Викторина

POST кладёт работу в очередь и возвращает 202 Accepted за 40мс; consumer пишет строку ~700мс спустя. UI делает POST, а затем сразу рефетчит список. Что увидит пользователь и почему?

Викторина

Ты подключаешь optimistic-обновление в TanStack Query useMutation. Какой шаг чаще всего пропускают джуны и что ломается без него?

Викторина

Кнопка 'Оплатить' показывает спиннер. Событие, подтверждающее списание, не приходит, потому что consumer упал. Без дополнительной обработки что произойдёт?

Викторина

Предсказуемое действие (переключение чекбокса, которое идёт через очередь, consumer пишет ~500мс спустя) показывается блокирующим спиннером до подтверждения consumer'ом. Что не так с этим UX-выбором?

Викторина

Два пользователя одновременно правят тело одного общего документа; обе записи идут через очередь. Бэкенд разрешает конфликт через last-write-wins (LWW). В чём senior-критика?

Викторина

Пользователь жмёт 'Отправить', не видит фидбэка, потому что pending-состояние не построили, и жмёт снова. В очередь падают два сообщения. Какой устойчивый корневой фикс?

Итог

Сквозная линия юнита — одно правило: асинхронная запись не читается мгновенно, поэтому consistency-окно становится проблемой фронтенда. Когда клиент может предсказать результат, используй optimistic UI — снапшот, предсказание, reconcile или rollback — чтобы выиграть ~0мс воспринимаемой задержки против порогов 100мс/1с/10с. Когда исходом владеет сервер, покажи честное pending-состояние с timeout, чтобы неприходящее событие не крутилось вечно, и никогда не сворачивай 202 в success-тост. Эхай записи локально вместо доверия гоночному рефетчу, ключуй retry, чтобы двойной клик не списал дважды, и разрешай конфликты осознанно — LWW для простых полей, CRDT для общего текста — делая исход читаемым, а не тихо перезаписывая пользователя.

Продолжить восхождение ↑UX при eventual consistency: свободное припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.