Задать вопрос
@stadyDev
Фронтенд разработчик

Изоляция сетевого слоя (WebSockets/Fetch) в Web Worker для высоконагруженного UI: используют ли такой паттерн в реальном проде?

Стало интересно, насколько в реальном продакшене распространена практика, когда весь сетевой слой (WebSocket-соединения, тяжелые fetch-запросы, парсинг JSON, обработку битовых масок) целиком уносят в Web Worker для realtime поиска и преобразования данных?

Идея в том, что главный поток вообще напрямую с бэком не общается. Интерфейс только кидает воркеру айдишники того, что сейчас на экране, а воркер сам все скачивает, собирает в фоне чистый стейт и выплевывает его на страницу уже готовым к рендеру в карточки (например карточки туров, возьмем в пример турагрегаторы)
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Веб-разработчик Базовый
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Web-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
@null_object
Используется, из того, что сразу вспоминается - веб версии телеграмма. У них достаточно интересная реализация уровня работы с данными. Весь сетевой слой: MTProto-соединения (это их бинарный протокол вместо классического json), шифрование, сериализация, обработка апдейтов, нормализация и кэширование) живёт в воркере, а главный поток через Proxy-обёртку просто запрашивает доменные данные и получает их готовыми к рендеру. Только они используют SharedWorker, чтобы один сокет шарился между всеми вкладками.

Сейчас всё чаще слышно про local-first подход, который подразумевает минимальный и что самое главное - не заметный для пользователя обмен данными с сервером. То есть на клиенте хранятся кэш с ранее загруженными данными для ui, если что-то изменяется - сервер или клиент обмениваются только обновлениями, для этого придумали разные sync-engine и другие сложные штуки. Концепция спорная, да и всё хранить локально на клиенте очевидно не получится.

Вообще, разные бывают ситуации и нужно комплексно смотреть на архитектуру фронта и бэка. Точно можно сказать, что это сильно усложнит код и придётся задуматься о вещах, о которых раньше не приходилось думать: как типизировать контракт между потоками, как не упереться в стоимость postMessage со структурным клонированием больших объектов, как отлаживать гонки в realtime-апдейтах. Фактически придётся построить и поддерживать свой маленький RPC-фреймворк
Ответ написан
opium
@opium
Просто люблю качественно работать
да, используется. В финтехе и трейдинг-панелях именно так: воркер держит WS, собирает стейт, в UI шлёт уже распакованный объект. Comlink от гугла снимает боль с postMessage-сериализации. Нюанс: Web Worker ≠ Service Worker. SW перехватывает fetch глобально и умеет кэш, WW нет. Для твоего случая (real-time поиск + карточки) WW — правильный выбор.
Ответ написан
Steel_Balls
@Steel_Balls
Такое не принято использовать. Тонкий клиент не должен превращаться в толстого.
Очень огорчает, что в айтишку сейчас влилась масса дуболомов, которые не понимают базовых архитектурных паттернов.
В итоге мы получаем тяжёлые сайты, страницы, приложения.
Ссаными тряпками таких самозванцев надо выгонять из индустрии.

P.S. за один только термин "высоконагруженного UI" нужно выдавать волчий билет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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