TGViewer
SuperOleg dev notes SuperOleg dev notes @super_oleg_dev · 1.75K subscribers
Post #227 1.72K
Интересный драфт появился в Undici (современный встроенный в Node.js клиент для запросов) - реализация паттерна Circuit Breaker - https://github.com/nodejs/undici/pull/4700/

По сути, сейчас Undici закрывает практически все кейсы, которые мы хотим видеть для эффективных серверных запросов:
- кэширование запросов
- дедупликация запросов
- ретрай запросов
- проксирование и поддержка переменных окружения http_proxy/no_proxy
- переиспользование tcp сокетов (из коробки, а с http.request для этого нужно прокидывать явно Agent с keepAlive: true)
- dns кэширование
- circuit breaker
- мониторинг/логирование через diagnostics_channel

Мы как раз активно мигрируем на undici.fetch в Tramvai на замену node-fetch, и это уже вылилось в несколько небольших доработок в undici:
- мониторинг кэша - https://github.com/nodejs/undici/pull/4589
- мониторинг прокси - https://github.com/nodejs/undici/pull/4659
- env proxy ближе к стандарту - https://github.com/nodejs/undici/pull/4676

Кстати, классные и дружелюбные мейнтейнеры (называю их за глаза "мои итальянцы"), но уже месяца два не могу дождаться релиза - возможно готовят мажорку или просто хотят большой скоуп фичей за раз.

Так вот, наша особенность - SSR приложения требуют универсальные интерфейсы для сервера и для браузера, для этих целей у нас реализована библиотека @tinkoff/request, которая работает поверх fetch в браузере и теперь уже поверх undici.fetch в ноде.

Если посмотреть на список плагинов @tinkoff/request - https://tramvaijs.github.io/request/docs/plugins/index - мы увидем те же кэши, дедупликацию, circuit breaker (очень кстати эффективный механизм для кейсов когда в обычном виде кэширование не подходит, но можно делать фаллбэк кэши на случай сбоев), в общем все что нужно для хорошего http клиента и не завязано на конкретное окружение.

Специфичные под серверное окружение вещи (dns кэши и прочее) мы настраиваем уже на уровне отдельных Tramvai модулей.

Теперь же получается, что мы дублируем функционал Undici, а было бы очень круто переиспользовать все его возможности - но упираемся в то, что в браузере у нас обычный fetch, а у мейнтейнеров Undici в принципе планов на веб нет (и это вполне оправданно).

Кажется, было бы очень полезно если бы браузерный fetch расширяли новыми возможностями (по принципу тех же interceptors в Undici), и браузерное API поставляло бы готовые сущности для таких базовых вещей как дедупликация и ретрай запросов, мониторинг, да и наверное проксирование.

С другой стороны, многие вещи уже идут в браузере из коробки - кэширование с учетом Cache-Control, E-tag и прочих заголовков, переиспользование TCP сокета открытого под конкретных хост, а все отправленные запросы доступны через performance.getEntries('fetch').

И возможно опциональные изменения нужны именно в браузерные механизмы работы сетевых запросов, или в саму спеку HTTP протокола, где ту же дедупликацию мы могли бы настроить через новые HTTP-заголовки?
GitHub feat: add circuit breaker interceptor by mcollina · Pull Request #4700 · nodejs/undici Summary Adds a per-host/route circuit breaker interceptor for resilient HTTP client behavior. Features Three circuit states: CLOSED (normal operation), OPEN (fast-fail), HALF_OPEN (testing recover...
  • 🔥 13
  • 👍 8
  • 🤔 3
More from @super_oleg_dev
  1. Sep 10, 2026Посмотреть на работу анимаций и скролла можно в нашей демке, основанной на примере Remix ф…
  2. Sep 10, 2026Далее, про скролл. В принципе для SPA-приложений это база, если при переходах на разные ст…
  3. Sep 10, 2026Раз уж меня прорвало, вспомню ещё один интересный кейс. Решали примерно в одно время две п…
  4. Sep 10, 2026Вместо тысячи слов, пример работы и сразу разметка, которая долетает в HTML - и наш механи…
  5. Sep 10, 2026Когда-то давно рассказывал про интеграцию стриминга и deferred загрузки данных в Tramvai -…
  6. Sep 7, 2026TIL, небольшой, но интересный кейс! Делал кастомный анализ бандла через Claude, пишет мне…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →