Рубрики
Без рубрики

Почему веб-работники?

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

Автор оригинала: Cedric Poilly.

Веб-работники появился около восьми лет назад, но мы все еще не упоминаем об этом на передней сцене.

Что такое веб-работник?

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

Почему это важно?

Одно слово: производительность. Фрондный код имеет тенденцию обрабатывать все больше и больше ресурсоемких задач. Тем не менее, мы все еще хотим, чтобы интернет-интерфейс белкнулся гладко: 60 кложений для большинства устройств. Другими словами, приложение получает 16 миллисекундров для запуска кода JavaScript и еще раз рендера.

Вызовы

  • JavaScript – это отдельная резьба: он может выполнить только одну строку кода одновременно.
  • Браузер выделяет только определенное количество ресурсов на вкладку – нашей главной нити.
  • Больше приложений предлагают автономные возможности, требующие много обработки на самом устройстве.

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

Пример

У нас есть наше приложение, которое фильтрует и сортирует большой набор данных (Ex. 7000 записей) с некоторыми неудачными анимациями. Мы фильтруем список, как мы введем в поле поиска. Фильтрация массива 7000+ объектов не имеет большого значения для рабочей станции вашего разработчика. Но на вашем смартфоне приложение будет ямы.

Но почему? Каждый раз, когда пользователь вписывается, приложение фильтрует список, затем рендерирует. Между тем пользователь не может ввести, замораживание UI. Сама фильтрация занимает более 16 мс: мы (путь) по бюджету.

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

Идти дальше

Наше приложение больше не жаждет, но все же займет довольно время, чтобы вернуть результаты. Чтобы решить это, мы можем использовать еще больше ресурсов: давайте порождать дюжину веб-работников!

Разделить и завоевать Да, каждая вкладка может порождать более одного работника. Это пригодится в нашем случае, когда мы можем разделить список и назначить кусок каждому рабочему потоку. Результаты отправляются обратно и объединены на основной поток для отображения.

Там у вас есть: исполнительная фронтальная фильтрация, спасибо веб-работникам. Я напишу сообщение, демонстрирующее это дело. Код будет доступен на GitHub, и я свяжу это здесь.

Счастливое кодирование!