Потоки в web с помощью module workers
Web-worker — это механизм, который позволяет вынести выполнение кода из главного потока браузера. Он доступен в браузерах уже более 10 лет. Проблема в том, что загрузка дополнительного кода в воркерах застряла в 2009 году — там используется синхронная функция loadScripts()
, которая загружает код в глобальную область видимости модуля. Джейсон Миллер из Google рассказал про новый подход, который позволяет устранить недостатки старого подхода работы с модульным кодом в веб-воркерах — "Threading the web with module workers".
Новый подход использует ESM ( import/export
), тем самым автоматически подхватывая все преимущества загрузчика новой модульной системы (параллельная загрузка кода, предварительная загрузка и парсинг кода с помощью хинта modulepreload
). Тип воркера необходимо указывать при его создании, передавая дополнительный аргумент {type: 'module'}
:
const worker = new Worker('worker.js', {
type: 'module'
});
На данный момент поддержка module workers есть только в Chrome 80. Идёт работа над поддержкой ESM в service workers.