Как построить дом, если ты — веб-воркер

Кирилл Чугаинов, iTechArt

Как построить дом,
если ты — веб-воркер?

Обложка доклада

Кирилл Чугаинов

Скриншот подкаста Frontend weekend

11:03

???

Мем 'кто мы?'
Мем 'кто мы?'
Типичный дизайнер

Браузер работает
в один поток

Конвеер рендера

Схема рендеринга в браузере

Конвеер рендера

Схема рендеринга в браузере и JS

Один поток

Один поток

Один поток

Один поток
Доклад иван тулуп
Михаил Башуров. Иван Тулуп: асинхронщина в JS под капотом / Frontend Conf 2018

Отдельный поток

Вынос логики в другой поток

Веб-работяга

Фотография рабочего

Внутри кода

      const myWorker = new Worker('worker.js');
        ...
        myWorker.postMessage(args);
        ...
      myWorker.addEventListener('message', (e) => {...}, false);
    

Внутри файла работяги

      self.addEventListener('message', function(e) {
        ...
        self.postMessage(result);
        ...
      }, false);
    

Веб-работяга

Фотография рабочего
Скриншот can i use с очень хорошей поддержкой

Потокобезопасность

Потокобезопасность

Схема влияния двух потоков на один объект
Лебедь рак и щука тянут воз

postMessage(msg);

postMessage(msg, [transfer]);

DOM не потокобезопасен

Веб-работяга не может взаимодействовать с DOM

vDOM

Решения

  1. Building an async react renderer with diffing in web worker
  2. Preact worker demo
  3. Worker dom
  4. Preact-www
  5. Virtualdom-in-web-worker

Где используется?

www.smashingmagazine.com/2019/04/webassembly-speed-web-app/
Пример работы fastq.bio
www.smashingmagazine.com/2019/04/webassembly-speed-web-app/
Схема работы

Прогрессивно улучшайте!

Прогрессивно улучшайте!

      if (window.Worker) { 
        const myWorker = new Worker('worker.js');
      };
    

Полезные ссылки

  1. Немного о worker’аx​ | Технострим
  2. Как работает JS: веб-воркеры и 5 сценариев их использования
  3. Web Workers API
  4. Javascript web workers tutorial
  5. Знакомство с web worker
  6. A Guide to using Web Workers in React
@Chugainovkirill

Спасибо за внимание!

Вопросы?