Если вы сталкиваетесь с тем, что экран подвисает на медленной сети, один и тот же запрос улетает в прод трижды, а таймауты в коде — это числа, которые «кто-то когда-то вписал и никто не трогал», значит networking-слой у вас живёт по наитию. fetch работает, задача закрыта. Но на ревью почти никто не спрашивает: а что происходит, когда пользователь уже ушёл с экрана, а запрос ещё летит? Или когда сеть деградировала, а ваши retry превратили один вызов в восемь?

На самом деле проблема не в том, что «сеть плохая» и даже не в отсутствии кэша. Проблема в том, что клиент не знает стоимость запроса — для батареи, для радио, для терпения пользователя. Отмена, coalescing, приоритеты — это не продвинутые фишки, а вежливость клиента по отношению к сети.

Вот что важно понимать: запрос без cancel — это утечка не памяти, а ресурсов устройства и внимания юзера. HTTP/2 multiplexing не спасёт, если старый запрос не отменяется при новом. А coalescing одинаковых запросов обычно даёт на реальной сети больше, чем любая оптимизация рендера — и именно это отличает Middle-решение от джуниорского «просто обернуть в useEffect».

Разбираем это в курсе Продвинутый клиентский networking: таймауты, отмена, coalescing, кэш-заголовки и стоимость радио на примерах из продакшена. Первый модуль бесплатно.

Подписывайтесь — дальше разбираем такие вещи регулярно.