JS Event Loop, можно ли заблокировать?

Всем привет.

Ситуация следующая. В браузере асинхронная логика (насколько я понимаю), реализована за счет Event Loop, т.е все вызовы в т.ч. отложенные (таймауты, XHR и прочее) попадают в один общий стек браузера, который последовательно вызывается браузером. Таким образом со стороны клиента мы можем реализовать асинхронную логику, но фактически для браузера это один общий поток вызовов.

Что произойдет если в этом стеке функция не вернет ответ, и браузер будет считать что она выполняется бесконечно долго? Будут ли выполняться браузером вызовы функций, отправка событий в JS, и т.п., находящихся дальше по стеку?

Реальный кейс: реализация плагинов для браузера, которые предоставляют JS API, и функции из этого API могут не возвращать ответ (синхронно) в течении очень продолжительного времени. Как должен себя вести в этом случае браузер?
  • Вопрос задан
  • 1286 просмотров
Решения вопроса 1
@GreatRash
Я в этом слабо разбираюсь. Но вроде вот эта ссылка должна вам помочь.
Или даже вот.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
IonDen
@IonDen
JavaScript developer. IonDen.com
Вопрос не очень понятен. Причем тут асинхронные функци?

1. Допустим у вас есть функция, вычисляющая число Пи до триллиона знаков (ну в общем любая функция с очень тяжелыми вычислениями).
2. Допустим вы хотите выполнить эту функцию только когда юзер нажал на кнопку.
3. В результате вы получите то, что вызов этой функции будет вставлен в стек выполнения лишь через неопределенное время в будущем.
4. Но вот тогда когда она уже будет вставлена (после клика) вот тогда она комп и повесит, потому что сама по себе она синхронная.

Единственный способ выполнить тяжелые вычисления асинхронно - вынести их в Web Worker
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы