#1 DOM в WebWorker? Как? - Многопоточность и DOM

7 879 просмотров • 3 августа 2022 г.

JavaScript.Ninja

49 тыс. подписчиков

Разговариваем о

Marina Bryleva

23.08.22 в 16:58

alert/prompt можливо блокуe чергу. Iлья, дякую за вiдео

Alexandr Gulevskih

19.08.22 в 07:25

Решается через синхронный XmlHhttpRequest делаем запрос перехватываем его держим открытым и параллельно делаем свои асинхронные делишки.

Traktor

13.08.22 в 18:03

Сделать бесконечный цикл, который будет проверять пришло ли ответное сообщение, только тогда надо будет использовать этот sharedArrayBuffer объект. Хз, мне кажется может получиться

Bubble Sort

09.08.22 в 20:06

А куда идти за пирожком?)

Mettadon

08.08.22 в 16:50

Очень круто, спасибо за видео!

Sergey Vronskiy

07.08.22 в 14:31

Очень умный парень, очень много делает для всех, надеюсь ума хватит, чтоб не загребли и не отправили в мясорубку

Icy Shine

06.08.22 в 20:56

Похорошел кстати

melo malo

05.08.22 в 19:03

Берегите себя Илья!

mr alex

05.08.22 в 16:11

а куда пропал мой коммент где я описал один из способов?

Alexey Ku

04.08.22 в 20:52

. while(true) // ждём ответа
Это анти-паттерн в основном потоке , но в воркерах, почему бы и нет? Конечно же с точки зрения cpu неэффективно и батарейку будет жрать только в путь, но кого это волнует в наше время))

Maksim Nesterenko

04.08.22 в 18:47

Уууу... ну поток блокируется бесконечным циклом хорошо :) можно просто сделать while(waitForReply) какой-нибудь и он должен подвешать поток. А внутри цикла как-то проверять новые сообщения от основного потока в надежде что придет то самое сообщение и разблочит поток. Не знаю даже как еще можно "приостановить" поток. Но сомнительно что бесконечные циклы в фоне хорошая идея. И не совсем понятно как изнутри цикла который заблокировал поток будут выполняться те же слушатели для postmessage. По идее никак если поток блокирован.Такая себе идея получается.

Еще думал про какую-нибудь shared memory между основным потоком и воркером чтобы сделать операцию синхронной. Можно было бы в эту сторону покопать.

cliff hanger это ты конечно хорошо придумал, заставляет хотя бы немножко подумать над решением, что лучше чем просто его сразу узнать с точки зрения получения информации

Никишкин Александр

04.08.22 в 15:15

Запустить вызов микротасков бесконечно в зависимости от флага. Потом когда получили обраный ответ снять флаг.

Roman

04.08.22 в 13:38

while c pointer?

Самандар aka P1GAS

04.08.22 в 07:04

А если в функцию добавить setTimeout которая вызывает эту же функцию до тех пор, пока операция не завершилась

Dime

04.08.22 в 04:00

Сорян, но произношение слов width, height, query - боль.

Anton Kolesnikov

03.08.22 в 23:38

До конца не додумал мысль, но вариант такой: под капотом async у нас promise и генераторы. Поэтому возможно что-то похожее.

Alex Grib @ XHT

03.08.22 в 22:58

Если я не ошибаюсь, запуск скриптов в Worker'е с проксированием DOM умела ещё AMP

Demetrio

03.08.22 в 22:12

Крутить while в котором проверять что в SharedArrayBuffer появилось значение, которое записывать из основного потока?

Bogdan Onischenko

03.08.22 в 21:44

Спустя пару минут гугления, нашел вот такую штуку: Atomics.wait(), которая позволяет синхронно подождать какой то таймаут. Т.е. мы можем "уснуть" на какое то время, и потом проверить, а не пришло ли уже значение из главного треда. Звучит как рабочий вариант. Ну и еще из глупого решения - сделать бесконечный while, который будет грузить cpu.

bro-dev

03.08.22 в 21:39

Тупой способ это проверка шаредбуфера в вайле. Продвинутый тоже самое, но на бэке делаем апи которые отвечает ровно через сек, а в вайле дергаем эту апи синхронным XHR.

Sten451

03.08.22 в 20:14

Только сегодня вспоминал Вас, давно видео не было, начал волноваться... Берегите себя.

Александр Прозоров

03.08.22 в 19:26

Вероятно в итоге все равно потребуется обменяться SharedArrayBuffer и повесить мьютекс на функцию работающую с DOM. Если код из WW хочет получить offsetWidth, а затем, основываясь на этом значении что-то сделать с DOM - эта операция должна быть атомарной (что, если другой поток поменяет ширину элемента в промежутке между обменом сообщениями). Главный поток гарантирует нам атомарность при работе с DOM, а рассмотренном случае мы ее теряем.

Yevhen Badorov

03.08.22 в 19:05

Треба м'ютекс реалізований через shared array buffer, як Тимур реалізовував тут https://www.youtube.com/watch?v=JNLrITevhRI

Витя Полторацкий

03.08.22 в 17:22

Кроме генераторов в джс ничего нет пока , чтоб это сделать адекватно

Eugene Karataev

03.08.22 в 17:03

Как заблокировать эвентлуп? Через микротаски!

Максим Гринберг

03.08.22 в 16:52

yield

Eugene Karataev

03.08.22 в 16:50

Спасибо что контент снова на русском. Астрологи предсказывают увеличение аудитории в 10 раз

Дима Чухарев

03.08.22 в 16:45

Atomics.wait() ??

Alex Roberto

03.08.22 в 16:23

Можно топорно заблокировать бесконечным циклом с проверкой (прощай CPU). Вообще как то пробовал делать что то похожее на sleep при синхронном исполнении.

Александр Гук

03.08.22 в 16:04

Очень актуальная тема. Жду продолжения. Как заблокировать эвентлуп, хотя бы одним из способов, понятно, интересно как его потом разблокировать.

sergeyvp

03.08.22 в 15:52

Если потоки могут обмениваться объектами, значит воркер может просто запросить объект, поставить блокировку на изменение этого объекта в основном потоке, сделать всё что нужно и вернуть объект в основной поток сняв блокировку с него. Зачем блокировать эвентлуп?

KristinaShi

03.08.22 в 15:20

❤️

Станислав Миляев

03.08.22 в 15:13

Занятно. Спасибо.

Андрей Новиков

03.08.22 в 15:13

Илья, спасибо вам большое за ваш вклад в сообщество! Вы прекрасный человек и специалист! Здоровья вам и мира этому миру!

Любомир Петелюк

03.08.22 в 15:10

Яка ситуація у Харкові? Привіт з Франківська)

Mur Amur

03.08.22 в 15:00

ответ наверное генераторы?
так как это единственное что приходит на ум

Илья Брежнев

03.08.22 в 14:46

интригант )))

Рекомендации:

JavaScript.Ninja

0 просмотров •

24 августа 2022 г.

JavaScript.Ninja

8 388 просмотров •

28 июня 2022 г.

JavaScript.Ninja

7 775 просмотров •

3 июня 2022 г.

JavaScript.Ninja

2 628 просмотров •

22 мая 2022 г.

JavaScript.Ninja

2 995 просмотров •

11 мая 2022 г.

JavaScript.Ninja

3 050 просмотров •

30 апреля 2022 г.

JavaScript.Ninja

4 773 просмотра •

25 апреля 2022 г.

JavaScript.Ninja

5 796 просмотров •

2 апреля 2022 г.

JavaScript.Ninja

4 721 просмотр •

2 апреля 2022 г.

JavaScript.Ninja

6 535 просмотров •

2 апреля 2022 г.

JavaScript.Ninja

4 419 просмотров •

20 марта 2022 г.

JavaScript.Ninja

6 218 просмотров •

20 марта 2022 г.

JavaScript.Ninja

8 534 просмотра •

6 декабря 2021 г.

JavaScript.Ninja

9 258 просмотров •

25 декабря 2021 г.

JavaScript.Ninja

7 320 просмотров •

29 декабря 2021 г.

JavaScript.Ninja

8 732 просмотра •

10 января 2022 г.

JavaScript.Ninja

9 024 просмотра •

29 января 2022 г.

JavaScript.Ninja

6 833 просмотра •

29 января 2022 г.

JavaScript.Ninja

9 208 просмотров •

31 января 2022 г.

JavaScript.Ninja

7 816 просмотров •

31 января 2022 г.

JavaScript.Ninja

5 265 просмотров •

31 января 2022 г.

JavaScript.Ninja

5 496 просмотров •

31 января 2022 г.

JavaScript.Ninja

4 983 просмотра •

31 января 2022 г.

JavaScript.Ninja

4 380 просмотров •

31 января 2022 г.

showinfo=0 controls=1 rel=0 iv_load_policy=3