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

    @null_object
    Используется, из того, что сразу вспоминается - веб версии телеграмма. У них достаточно интересная реализация уровня работы с данными. Весь сетевой слой: MTProto-соединения (это их бинарный протокол вместо классического json), шифрование, сериализация, обработка апдейтов, нормализация и кэширование) живёт в воркере, а главный поток через Proxy-обёртку просто запрашивает доменные данные и получает их готовыми к рендеру. Только они используют SharedWorker, чтобы один сокет шарился между всеми вкладками.

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

    Вообще, разные бывают ситуации и нужно комплексно смотреть на архитектуру фронта и бэка. Точно можно сказать, что это сильно усложнит код и придётся задуматься о вещах, о которых раньше не приходилось думать: как типизировать контракт между потоками, как не упереться в стоимость postMessage со структурным клонированием больших объектов, как отлаживать гонки в realtime-апдейтах. Фактически придётся построить и поддерживать свой маленький RPC-фреймворк
    Ответ написан
    1 комментарий
  • Изоляция сетевого слоя (WebSockets/Fetch) в Web Worker для высоконагруженного UI: используют ли такой паттерн в реальном проде?

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