Наши веб-приложения отвратительно работают с сетью.
Проблема, что мы разрабатываем их в идеальных условиях, а реальная сеть темна и полна ужасов.
Картинки в тему от @nikitonsky


В поиск вводят X, отправляем X AJAX на сервере. Потом тут же добавляют XY, отправляем.
Но с сервера ответы приходят в другом порядке — XY, X.
В итоге в поиске написано XY, а результаты для X. Даже у ВК была такая ошибка.
gist.github.com/ai/fa3999b22a6…

Вышла новая фича, обновили API между клиентом и сервером. Депллоим вместе клиент и сервер.
Но у нас SPA и пользователи неделями не обновляют страницу приложения. В итоге старый JS посылает AJAX на новый сервер и всё ломается.
Показываете крутилку, отсылаете AJAX на сервер.
Интернет слега мигает (метро или помехи в LTE) — fetch() выкидывает catch() для которого забыли обработчика. В UI вечно крутится лоадер без возможности отменить запрос.
Едешь в метро (в Нью-Йорке в тунеле нет Интернета), увидел вопрос. Написал ответ — скучаешь и ждёшь станции, чтобы отправить написанный ответ.
Вот в приложении Твиттера можно кликнуть на лайк, он покажет что лайк засчитан, отматываешь ленту на пару экранов вперёд. С AJAX приходит ошибка (так как связь в метро пропала) — твиттер-клиент показывает, что лайк не засчитан.
1. очередь сообщений — посылать их заново, когда связь появилась
2. UI, что есть запросы в очереди
Если сайт открыт в нескольких вкладках, то там вечно несинхронизированные данные. Например, кол-во товаров или уведочлений будет отличаться в разных вкладках.
developer.mozilla.org/en-US/docs/Web…
Пользователь А открыл документ. Б открыл тот же документ. Пока А что-то правит, Б не видит этих изменений. В итоге Б затрёт изменения А.
UI «Документ был изменён кем-то ещё, объедините правки руками» — тоже ад.
Люди добавляют саги, action creators и т. п.