Вступление

Некоторые люди считают, что мы всегда должны использовать веб-воркеров, а другие считают, что мы должны использовать их только в определенных случаях. В целом считается, что веб-воркеры полезны для обработки больших объемов данных.

Некоторое время назад я работал над проектом React.js с бэкэндом Apollo GraphQL, который имел хороший пример использования для веб-воркеров, и придумал небольшой эксперимент, чтобы попробовать: что, если бы мы организовали веб-воркеры с Apollo?

Локальные резолверы с Apollo 🚀

GraphQL использует функции разрешения для получения данных, которые запрашивает клиент. Эти резолверы могут извлекать данные из нескольких источников:

У потребителей есть один источник правды, и им все равно, откуда берутся исходные данные.

Клиент Apollo использует GraphQL локально для выполнения запросов и может иметь локальные преобразователи для взаимодействия с данными:

Веб-воркеры с Apollo

Веб-воркеры немного сложны в использовании и не очень интуитивно понятны для многих разработчиков JavaScript, которые привыкли к традиционному однопоточному мышлению. Comlink - это библиотека, которая обертывает функцию, запускает ее в веб-воркере и возвращает обещание с результатом. Это самый простой способ настройки веб-работников.

Поскольку преобразователи Apollo могут возвращать обещания, мы можем использовать обернутую функцию comlink для разрешения данных и получить результат с помощью запроса GraphQL:

Хотя в приведенном выше примере очень просто отобразить концепцию, его можно применить к вычислениям, которые требуют много времени для обработки и возврата списков данных для просмотра пользователем.

Одним из недостатков comlink по сравнению с обычными веб-воркерами является отсутствие возможности показывать прогресс с течением времени пользователям с помощью индикатора выполнения или возможность отображать данные по мере их вычисления. Оркестровка веб-воркеров с помощью Apollo позволяет нам создать метод для вычисления данных по частям, аналогично тому, как приложение может использовать разбиение на страницы для выборки данных по частям.

Преимущества оркестрованных веб-воркеров Apollo

Использование Apollo для оркестровки веб-работников предоставит единообразный способ взаимодействия со всеми данными. Компоненту не нужно использовать какие-либо дополнительные хуки или код для использования веб-воркеров. Получение результатов от веб-воркера будет таким же, как получение результатов из удаленного API.

Любые результаты, полученные от веб-работников, будут использовать кеширование Apollo без каких-либо дополнительных настроек. Если в будущем потребуется выполнить те же вычисления, кешированные результаты будут возвращены немедленно.

Этот последовательный способ взаимодействия с данными помогает поддерживать ремонтопригодность. React.js сейчас в тренде и Apollo тоже; многие разработчики используют эту пару вместе. Используя эти инструменты для взаимодействия с веб-воркерами, многим разработчикам будет легко подбирать и наращивать со временем, даже более младшие разработчики.

Конечный результат

Моя первоначальная цель состояла в том, чтобы поэкспериментировать с использованием Apollo для оркестровки веб-воркеров, и я обнаружил, что польза от того, насколько проста и мала эта установка, очень высока.

Спасибо за чтение! Надеюсь, это вдохновит вас на поиски других способов взаимодействия с веб-воркерами, таких как этот хук от Daishi Kato, и на поиск других способов использования локальных преобразователей Apollo.