Event Loop Flashcards

1
Q

Что такое Event loop’?

‘Цикл событий

A

Цикл событий - это механизм ожидания и запуска задач‘1 из очереди задач‘2.

Event loops

‘1 task
‘2 task queue

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

В каких стандартах описан механизм работы цикла событий?

A

Цикл событий описан в стандартах реализаций, интерпретирующих ECMAScript.
Для браузеров - это HTML5, для серверных приложений - NodeJS.
Соответственно, все браузеры должны реализовывать цикл событий строго по стандарту HTML5 для предсказуемой интерпретации кода в браузере.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое ECMAScript?

A

ECMAScript является стандартом для скриптовых языков, описанным в спецификации ECMA.
Стандарт может интерпретироваться в различных средах согласно соответствующим им спецификациям. Например, браузеры интерпретируют код согласно спецификации HTML5.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

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

Опишите 5 алгоритмов

A

Задачи в браузере включают в себя алгоритмы, ответственные за такую работу как:
1. Запуск события: document.dispatchEvent(event)
2. Парсинг документа, токенизация и последующая обработка
3. Вызов функции обратного вызова’1: обработка событий промисов’2, событий браузера и ошибок, таймауты, запросы анимационных фреймов’3 и др.
4. Обработка ресурса, запрошенного асинхронно
5. Реакция на изменение DOM

Задачи группируются по источникам в раздельных очередях в порядке FIFO’5 в целях оптимизации выполнения этих задач Агентом’5.

Строгая очередность задач необходима для обеспечения целостности документа, остальные механизмы браузера (отправка, ожидание и получение асинхронных запросов, ожидание и удовлетворение промисов, скроллинг, нажатия клавиш и отслеживание расположения курсора и др.), которые не связаны с документом, выполняются браузером параллельно.

Event loops

‘1 callback
‘2 promise
‘3 request animation frame
‘4 UserAgent
‘5 First-in-First-Out

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Какова структура задачи?

Опишите 4 компонента

A

Задача состоит из следующих компонентов:
1. Шаги для выполнения задачи
2. Источник задачи. Служит для распределения задач в очереди в целях оптимизации и отзывчивости
3. Документ, в котором исполняется задача или null
4. Объекты, характеризующие окружение

Event loops

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Каков механизм работы цикла событий?

Опишите 4 шага

A

Цикл событий должен постоянно проходить по следующим основным шагам:
1. Если у цикла событий есть очередь задач, в которой есть задачи, то выполнить старшую задачу из этой очереди
2. Выполнить очередь микрозадач‘1, начиная от старшей
3. Обновить рендеринг, выполнив все шаги для каждого активного документа
4. Если нет других задач в очередях, то через 50 мсек проверить наличие функций обратных вызовов запросов анимационных фреймов, далее выполнять проверку каждые 60 мсек.

Event loop processing model

‘1 microtask queue

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Каковы шаги обновления рендеринга в рамках цикла событий?

Опишите 10 шагов

A

Если цикл событий является компонентов окна’1, то выполнить последовательно сгруппированные шаги рендеринга для каждого документа:
1. Обновление кандидатов и применение автофокуса
2. Изменение размеров окна и инициация событий
3. Изменение положения скроллов и инициация событий
4. Изменение состояния медиа-запросов‘2 и инициация событий
5. Обновление анимаций и инициация событий
6. Изменение полноэкранности и инициация событий
7. Обновление состояний холстов‘3
8. Запуск функций обратного вызова запросов анимационных фреймов
9. Перерасчет стилей, обновление расположений и доставка размеров в наблюдатели
10. Перевод фокуса

Event loop processing model

‘1 window
‘2 media-query
‘3 canvases

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Опишите и обоснуйте порядок вывода следующего кода:

setTimeout(() => console.log(1), 50) // a
setTimeout(() => console.log(2), 0) // b
Promise.resolve().then(() => console.log(3)).then(() => console.log(4)) //c
requestAnimationFrame(() => console.log(5)) // d
console.log(6) // e
A

а - вызов коллбека попадет в очередь через 50 мсек и выполнтся в одном из следующих циклов
b - вызов коллбека попадет в очередь сразу после завершения текущего контекста и выполнтся в одном из следующих циклов
c - обработка промиса выполнится сразу же после завершения текущего контекста в текущем цикле
d - вызов коллбека в текущем цикла в рамках рендеринга
e - код исполнится в текущем стеке вызовов

6
3
4
5
2
1
How well did you know this?
1
Not at all
2
3
4
5
Perfectly