Асинхронный JavaScript

Содержание

Слайд 2

.className { transition: color 10s linear; } function animate(color) { element.style.color

.className {
transition: color 10s linear;
}

function animate(color) {
element.style.color = color;
}

animate(“blue”);

setTimeout(()

=> animate(“red”), 10);

.className

.className

Слайд 3

{ JavaScript } однопоточный не блокирующий асинхронный

{ JavaScript }
однопоточный
не блокирующий
асинхронный

Слайд 4

{ Концепция жизненного цикла }

{ Концепция жизненного цикла }

Слайд 5

{ Stack } структура, описывающая порядок выполнения кода

{ Stack }
структура, описывающая порядок выполнения кода

Слайд 6

{ Heap } это ссылка на определённую неструктурированную область памяти

{ Heap }
это ссылка на определённую неструктурированную область памяти

Слайд 7

{ Event Queue } список событий, подлежащих обработке Каждое событие ассоциируется

{ Event Queue }
список событий, подлежащих обработке

Каждое событие ассоциируется с некоторой

функцией. Когда на стеке освобождается достаточно места, событие извлекается из очереди и обрабатывается
Слайд 8

Слайд 9

Stack function fizz() { throw 'Error'; } function bazz() { fizz();

Stack

function fizz() {
throw 'Error';
}
function bazz() {
fizz();
}
function fizzbazz() {
fizz();

bazz();
}
fizzbazz();

Main

fizzbazz

fizz

bazz

fizz

Слайд 10

{ Переполнение стека }

{ Переполнение стека }

Слайд 11

Stack function bazz() { bazz(); } bazz(); Main bazz bazz bazz bazz bazz bazz bazz

Stack

function bazz() {
bazz();
}
bazz();

Main

bazz

bazz

bazz

bazz

bazz

bazz

bazz

Слайд 12

{ Очередь событий }

{ Очередь событий }

Слайд 13

Main fizzbazz log(‘fb’) setTimeout callback callback callback log(‘cb’)

Main

fizzbazz

log(‘fb’)

setTimeout

callback

callback

callback

log(‘cb’)

Слайд 14

function bazz() { setTimeout(bazz, 0); } bazz(); Main bazz setTimeout bazz

function bazz() {
setTimeout(bazz, 0);
}
bazz();

Main

bazz

setTimeout

bazz

bazz

bazz

setTimeout

bazz

bazz

bazz

Слайд 15

Main setTimeout bazz bazz bazz bazz bazz setTimeout bazz

Main

setTimeout

bazz

bazz

bazz

bazz

bazz

setTimeout

bazz

Слайд 16

Queue

Queue

Слайд 17

{ Task Queue }

{ Task Queue }

Слайд 18

Task Queue Stack

Task Queue

Stack

Слайд 19

{ Microtask Queue }

{ Microtask Queue }

Слайд 20

button.addEventListener('click', () => { Promise.resolve().then(() => console.log('Promise 1')); console.log('Click 1'); });

button.addEventListener('click', () => {
Promise.resolve().then(() => console.log('Promise 1'));
console.log('Click 1');
});
button.addEventListener('click', ()

=> {
Promise.resolve().then(() => console.log('Promise 2'));
console.log('Click 2');
});

button.click();

Слайд 21

Microtask Queue Stack

Microtask Queue

Stack

Слайд 22

{ Render Queue }

{ Render Queue }

Слайд 23

Render Queue RAF Stack Style Layout Painting button.addEventListener('click', () => {

Render Queue

RAF

Stack

Style

Layout

Painting

button.addEventListener('click', () => {
element.style.color = ‘red';
element.style.color = 'black';

element.style.color = ‘red';
element.style.color = 'black';
element.style.color = ‘red';
element.style.color = 'black';
});
Слайд 24

button.addEventListener('click', () => { element.style.color = 'red'; element.style.transition = 'color 1s

button.addEventListener('click', () => {
element.style.color = 'red';
element.style.transition = 'color 1s

linear';
element.style.color = 'black';
});

button.addEventListener('click', () => {
element.style.color = 'red';
element.style.transition = 'color 1s linear';
requestAnimationFrame(() => {
element.style.color = 'black';
});
});

Слайд 25

button.addEventListener('click', () => { element.style.color = 'red'; element.style.transition = 'color 1s

button.addEventListener('click', () => {
element.style.color = 'red';
element.style.transition = 'color 1s

linear';
getComputedStyle(element).color;
element.style.color = 'black';
});

button.addEventListener('click', () => {
element.style.color = 'red';
element.style.transition = 'color 1s linear';
requestAnimationFrame(() => {
requestAnimationFrame(() => {
element.style.color = 'black';
});
});
})