Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠΉΠ½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»: ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ

ΠŸΠΎΡ‚ΠΎΠΊ выполнСния Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ Π² Node.js, основан Π½Π° событийном Ρ†ΠΈΠΊΠ»Π΅.

ПониманиС Ρ€Π°Π±ΠΎΡ‚Ρ‹ событийного Ρ†ΠΈΠΊΠ»Π° Π²Π°ΠΆΠ½ΠΎ для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΈΠ½ΠΎΠ³Π΄Π° для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ сначала Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ Ρ‚Π΅ΠΎΡ€ΠΈΡŽ, Π° Π·Π°Ρ‚Π΅ΠΌ рассмотрим Π΅Ρ‘ практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠΉΠ½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ»

ИдСя событийного Ρ†ΠΈΠΊΠ»Π° ΠΎΡ‡Π΅Π½ΡŒ проста. Π•ΡΡ‚ΡŒ бСсконСчный Ρ†ΠΈΠΊΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΄Π²ΠΈΠΆΠΎΠΊ JavaScript ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, исполняСт ΠΈΡ… ΠΈ снова ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ появлСния Π½ΠΎΠ²Ρ‹Ρ….

ΠžΠ±Ρ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄Π²ΠΈΠΆΠΊΠ°:

Π­Ρ‚ΠΎ формализация Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ наблюдаСм, просматривая Π²Π΅Π±-страницу. Π”Π²ΠΈΠΆΠΎΠΊ JavaScript Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли трСбуСтся ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ скрипт/ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ событиС.

…Но, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²ΠΎ врСмя выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ выполнСния.

Π’Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ красивСС:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: Π΄Π΅Π»Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ послС события

Π’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ события ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия, ΠΏΠΎΠΊΠ° событиС Π½Π΅ «всплывёт» ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π½Π° всСх уровнях. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого, ΠΎΠ±Π΅Ρ€Π½ΡƒΠ² ΠΊΠΎΠ΄ Π² setTimeout с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ.

ΠœΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠœΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ

Помимо ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡, описанных Π² этой части, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, упомянутыС Π² Π³Π»Π°Π²Π΅ ΠœΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ.

Π‘Ρ€Π°Π·Ρƒ послС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Π΄Π²ΠΈΠΆΠΎΠΊ исполняСт всС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Ρƒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ измСнСния Π½Π° страницС, ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Ρ‘.

Какой здСсь Π±ΡƒΠ΄Π΅Ρ‚ порядок?

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ событийного Ρ†ΠΈΠΊΠ»Π° выглядит Ρ‚Π°ΠΊ:

ВсС ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ событий ΠΈΠ»ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅.

Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ остаётся ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ – Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΠΌΡ‹ΡˆΠΈ, Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ сСти ΠΈ Ρ‚.ΠΏ.

Π˜Ρ‚ΠΎΠ³ΠΎ

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ событийного Ρ†ΠΈΠΊΠ»Π° (Ρ…ΠΎΡ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½Ρ‹ΠΉ Π² сравнСнии со спСцификациСй):

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Ρƒ:

Π­Ρ‚ΠΎΡ‚ способ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для разбиСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Π½Π° части, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΌΠΎΠ³ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ события ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ прогрСсс выполнСния этих частСй.

Π’Π°ΠΊΠΆΠ΅ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°Ρ… событий для ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ выполнСния дСйствия послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ событиС ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ (всплытиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ).

Для добавлСния Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½ΠΎΠ²ΠΎΠΉ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ:

Бобытия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса ΠΈ сСтСвыС события Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ°Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ: ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ queueMicrotask ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для асинхронного выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ состоянии окруТСния.

Для Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… тяТёлых вычислСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ событийный Ρ†ΠΈΠΊΠ», ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Web Workers.

Π­Ρ‚ΠΎ способ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

Web Workers ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ сообщСниями с основным процСссом, Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ свои ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ свой событийный Ρ†ΠΈΠΊΠ».

Web Workers Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ доступа ΠΊ DOM, поэтому основноС ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ – вычислСния. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ядСр процСссора ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Π—Π°Π΄Π°Ρ‡ΠΈ

Π§Ρ‚ΠΎ ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π² консоли?

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‡Ρ‚ΠΎ здСсь происходит.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π² стСкС выполнСния находится сам скрипт, поэтому сначала выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π—Π°Π΄Π°Ρ‡ΠΈ, ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ ΠΏΠ»Π°Π½Ρ‹

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ Β«Tasks, microtasks, queues and schedulesΒ» Π”ΠΆΠ΅ΠΉΠΊΠ° ΠΡ€Ρ‡ΠΈΠ±Π°Π»ΡŒΠ΄Π° (Jake Achibald), Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ Developer Advocate for Google Chrome.

Когда я сказал своСму ΠΊΠΎΠ»Π»Π΅Π³Π΅ ΠœΡΡ‚Ρƒ Π“Π°Π½Ρ‚Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΡ‹Π²Π°ΡŽ ΠΎ написании ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΠ± очСрёдности ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΈ порядкС ΠΈΡ… исполнСния Π²Π½ΡƒΡ‚Ρ€ΠΈ событийного Ρ†ΠΈΠΊΠ»Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, ΠΎΠ½ сказал Β«Π”ΠΆΠ΅ΠΉΠΊ, Π±ΡƒΠ΄Ρƒ чСстСн, я ΠΎΠ± этом Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π΅ стану». Π§Ρ‚ΠΎ ΠΆ, я всё ΠΆΠ΅ написал, поэтому ΠΎΡ‚ΠΊΠΈΠ½ΡŒΡ‚Π΅ΡΡŒ Π½Π° спинку крСсла ΠΈ Π΄Π°Π²Π°ΠΉΡ‚Π΅ вмСстС Π² этом разбСрёмся, Π»Π°Π΄Π½ΠΎ?

На самом Π΄Π΅Π»Π΅, Ссли Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ выступлСниС Π€ΠΈΠ»ΠΈΠΏΠΏΠ° РобСртса Π½Π° JSConf, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ рассказываСт ΠΎ событийном Ρ†ΠΈΠΊΠ»Π΅ – ΠΎΠ½ΠΎ Π½Π΅ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, Π½ΠΎ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ являСтся ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ вступлСниСм Π² Ρ‚Π΅ΠΌΡƒ. Π’ любом случаС, погнали…

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° JavaScript:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ происходит

Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ понимания процСсса Π½ΡƒΠΆΠ½ΠΎ сначала ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ событийный Ρ†ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слишком слоТным. Π“Π»ΡƒΠ±ΠΎΠΊΠΈΠΉ вдох…

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Β«ΠΏΠΎΡ‚ΠΎΠΊΒ» ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный событийный Ρ†ΠΈΠΊΠ», Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π΅Π±-Π²ΠΎΡ€ΠΊΠ΅Ρ€, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ нСзависимо, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ всС ΠΎΠΊΠ½Π° с ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΌΠ΅Π½Π° (ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ same origin) дСлят ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ событийный Ρ†ΠΈΠΊΠ», вСдь ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ синхронно ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠΉΠ½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ постоянно, исполняя поставлСнныС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ. Π—Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ. Π›Π°Π΄Π½ΠΎ-Π»Π°Π΄Π½ΠΎ, Π½Π΅ уходитС…

Π—Π°Π΄Π°Ρ‡ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΌΠΎΠ³ ΠΈΠ· ΠΈΡ… Π΄Π΅Π±Ρ€Π΅ΠΉ ΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ Π½Π° зСмлю JavaScript/DOM ΠΈ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Ρ‡Ρ‚ΠΎ эти дСйствия происходят ΠΏΠΎΠΎΡ‡Π΅Ρ€Ρ‘Π΄Π½ΠΎ. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΊΠΎΠ»Π±Π΅ΠΊΠ° события Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΌΡ‹ΡˆΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ планирования Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π·Π±ΠΎΡ€ HTML ΠΈ setTimeout ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅.

ΠœΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ для Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ послС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ исполняСмого сцСнария. НапримСр, Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ‡ΠΊΡƒ дСйствий ΠΈΠ»ΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ асинхронно Π±Π΅Π· нСобходимости Ρ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° пустом мСстС ΠΈΠ·-Π·Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ развёртываСтся Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ послС ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ² Π² случаС Ссли Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ JavaScript Π½Π΅ находится Π½Π° стадии исполнСния. Π›ΡŽΠ±Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, поставлСнныС Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²ΠΎ врСмя развёртывания ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ. ΠœΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΠΊΠΎΠ»Π±Π΅ΠΊΠΈ Mutation observer ΠΈ промисов, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π² этом мСстС Ρƒ Π°Π²Ρ‚ΠΎΡ€Π° Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π΅ вставлСна вСликолСпная наглядная прСзСнтация Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‰ΠΈΠΊΠ° JavaScript, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ это Π½Π° Π₯Π°Π±Ρ€Π΅ Ρƒ мСня Π΅Π΄Π²Π° Π»ΠΈ имССтся тСхничСская Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, Π·Π° сим ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽ Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ читатСля Π½Π° страницу ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°.

Π”Π°, я ΠΈ ΠΏΡ€Π°Π²Π΄Π° сдСлал ΠΏΠΎΡˆΠ°Π³ΠΎΠ²ΡƒΡŽ Π°Π½ΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ. Как Π²Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ свою субботу, навСрняка гуляли Π³Π΄Π΅-Ρ‚ΠΎ Π½Π° свСТСм Π²ΠΎΠ·Π΄ΡƒΡ…Π΅ с Π΄Ρ€ΡƒΠ·ΡŒΡΠΌΠΈ? Π§Ρ‚ΠΎ ΠΆ, я – Π½Π΅Ρ‚. На случай, Ссли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ясно Π² ΠΌΠΎΡ‘ΠΌ ΠΎΠ±Π°Π»Π΄Π΅Π½Π½ΠΎΠΌ UI, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΡ‰Ρ‘Π»ΠΊΠ°Ρ‚ΡŒ стрСлочки Π²ΠΏΡ€Π°Π²ΠΎ-Π²Π»Π΅Π²ΠΎ.

Π§Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…?

Как ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° ΠΊΠΎΠ³Π΄Π° – ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ

Π’ΠΎΡ‡Π½Ρ‹ΠΉ способ – ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ. НапримСр, шаг 14 setTimeout ставит Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² спСцификации фиксирования ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ шаг 5 создаёт ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Ρƒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Π±ΠΎΠ»Π΅Π΅ комплСксный ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’ Π·Π°Π»Π΅ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ сконфуТСно вскрикнСт «НСт, ΠΎΠ½ΠΈ Π½Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹!Β». НС ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ внимания, Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ: Π‘Ρ…Π²Π°Ρ‚ΠΊΠ° с Боссом

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π·Π°Π΄Π°Ρ‡ΠΊΠ° ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΌΠ½Π΅ слоТной Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ я написал этот пост. Π’ΠΎΡ‚ нСбольшой кусок HTML:

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘Ρ‚Π΅ ΠΊ ΠΎΡ‚Π²Π΅Ρ‚Ρƒ. Подсказка: Π»ΠΎΠ³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ большС Ρ€Π°Π·Π°.

Π˜ΡΠΏΡ‹Ρ‚Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Ρƒ Π°Π²Ρ‚ΠΎΡ€Π° Π² этом мСстС Π² Π±Π»ΠΎΠ³Π΅ Π΅ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ DOM элСмСнт (прямая ссылка) Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΠΎΡ‡ΠΈΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ вашСго Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

Π’Ρ‹ Π΄ΡƒΠΌΠ°Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Π°Ρ‡Π΅? Π‘ΠΏΠ΅ΡˆΡƒ вас ΡƒΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π°Π²Ρ‹. К соТалСнию, Ρƒ Ρ€Π°Π·Π½Ρ‹Ρ… Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² разная ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ приятия этого мнСния:

ΠšΡ‚ΠΎ ΠΏΡ€Π°Π²?

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° события Β«clickΒ» это Π·Π°Π΄Π°Ρ‡Π°. КолбСки Mutation observer ΠΈ промиса ставятся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ. КолбСк setTimeout это Π·Π°Π΄Π°Ρ‡Π°. (ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Ρ‚ΡƒΡ‚ снова интСрактивная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°, ΠΏΠΎΡΡΠ½ΡΡŽΡ‰Π°Ρ пошагово ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π½Π΅Π΅ ΠΊΠΎΠ΄Π°, Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ.)

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Π΅Π΄Ρ‘Ρ‚ сСбя Chrome. Для мСня Π² Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ послС ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ² (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ это Π½Π΅ Ρ‡Π°ΡΡ‚ΡŒ выполнСния Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ сцСнария JavaScript), я Π΄ΡƒΠΌΠ°Π» Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ лишь ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠ΅ΠΌ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ описано Π² спСцификации HTML ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ²:

Execution of a Job can be initiated only when there is no running execution context and the execution context stack is empty…
β€” ECMAScript: Jobs and Job Queues

…хотя Β«can beΒ» Π² контСкстС HTML носит Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Β«must beΒ», Ρ‚.Π΅. «обязан».

Π§Ρ‚ΠΎ нСдопоняли Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹?

Firefox ΠΈ Safari Π²Π΅Ρ€Π½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ°ΡŽΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ², ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΏΠΎ ΠΊΠΎΠ»Π±Π΅ΠΊΠ°ΠΌ ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ, Π½ΠΎ промисы ставятся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠ½Π°Ρ‡Π΅. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ, особСнно учитывая Ρ‚ΡƒΠΌΠ°Π½Π½ΠΎΡΡ‚ΡŒ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ (Β«jobsΒ») ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ я ΠΎΠΆΠΈΠ΄Π°Π» Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ выполнятся ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. Заявка Π½Π° Firefox. Заявка Π½Π° Safari.

ΠœΡ‹ ΡƒΠΆΠ΅ поняли, Ρ‡Ρ‚ΠΎ Edge ставит промисы Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅Π²Π΅Ρ€Π½ΠΎ, Π½ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ стал ΠΎΠΏΡƒΡΡ‚ΠΎΡˆΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠ², вмСсто этого ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ»Π°ΡΡŒ лишь послС Π²Ρ‹Π·ΠΎΠ²Π° всСх ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ СдинствСнный Π²Ρ‹Π²ΠΎΠ΄ mutate послС ΠΎΠ±ΠΎΠΈΡ… click Π² ΠΆΡƒΡ€Π½Π°Π»Π΅. Π­Ρ‚ΠΎ ошибка.

Π—Π»ΠΎΠΉ Π±Ρ€Π°Ρ‚ Босса с ΠŸΠ΅Ρ€Π²ΠΎΠ³ΠΎ уровня

Π‘Π»ΠΈΠ½! А Ρ‡Ρ‚ΠΎ Ссли ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ:

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ Π½Π°Ρ‡Π½Ρ‘Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π΄ΠΎ этого, Π½ΠΎ посрСдством Π²Ρ‹Π·ΠΎΠ²Π° ΠΈΠ· сцСнария, Π° Π½Π΅ ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ взаимодСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Π˜ΡΠΏΡ‹Ρ‚Π°Π½ΠΈΠ΅

И я Π½Π΅ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² Chrome, я ΡƒΠΆΠ΅ сто Ρ€Π°Π· обновлял эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ думая Ρ‡Ρ‚ΠΎ Π΄ΠΎ этого ΠΏΠΎ ошибкС провСрял Π² Canary. Если Ρƒ вас Π² Chrome Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, скаТитС ΠΌΠ½Π΅ Π² коммСнтариях Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Π²Ρ‹ вСрсии.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ?

ΠŸΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‡ΠΈΠΊΠ°: Π² этом мСстС Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ послСдний Ρ€Π°Π· Π°Π²Ρ‚ΠΎΡ€ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΡΠ»Π°Π΄ΠΈΡ‚ΡŒΡΡ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ чудСс ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠΉ мысли браузСростроитСлСй (ссылка, ΠΎΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ, прямая).

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‰Π΅Π»Ρ‡ΠΊΠ° вызван…

Π Π°Π·Π²Π΅ это Π²Π°ΠΆΠ½ΠΎ?

Π•Ρ‰Ρ‘ Π±Ρ‹, это Π±ΡƒΠ΄Π΅Ρ‚ ΡΡŠΠ΅Π΄Π°Ρ‚ΡŒ вас ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ (ΡƒΡ„). Π― столкнулся с этим ΠΊΠΎΠ³Π΄Π° попытался ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΡƒΡŽ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ Π½Π°Π΄ IndexedDB, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ промисы вмСсто уТасных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² IDBRequest. Π‘ Π½Π΅ΠΉ IDB ΠΏΠΎΡ‡Ρ‚ΠΈ стал ΠΌΠ½Π΅ приятСн.

Когда Π² IDB срабатываСт событиС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ становится Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ послС ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ управлСния (шаг 4). Если я создам промис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²ΠΎ врСмя возбуТдСния этого события, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒΡΡ Π΄ΠΎ шага 4 ΠΏΠΎΠΊΠ° транзакция Π΅Ρ‰Ρ‘ Π°ΠΊΡ‚ΠΈΠ²Π½Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ этого Π½Π΅ происходит Π½ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΊΡ€ΠΎΠΌΠ΅ Chrome, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° становится ΠΊΠ°ΠΊ Π±Ρ‹ бСсполСзной.

Π’ Firefox с этим ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ, вСдь ΠΏΠΎΠ»ΠΈΡ„ΠΈΠ»Ρ‹ промисов, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ es6-promise, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Mutation observers для ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅ ΠΊΠ°ΠΊ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ. Safari ΠΏΡ€ΠΈ этом исправлСнии вступаСт Π² состояниС Π³ΠΎΠ½ΠΊΠΈ, Π½ΠΎ Π΄Π΅Π»ΠΎ, скорСС всСго, Π² ΠΈΡ… ΠΏΠΎΠ»ΠΎΠΌΠ°Π½Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ IDB. К соТалСнию IE/Edge Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ ΠΈΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ события ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΉ Π½Π΅ происходят послС ΠΊΠΎΠ»Π±Π΅ΠΊΠΎΠ².

ΠžΡΡ‚Π°Ρ‘Ρ‚ΡΡ лишь Π½Π°Π΄Π΅ΡΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ Π² этом вопросС ΠΌΡ‹ ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ смоТСм Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ.

ΠœΡ‹ сдСлали это!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² JavaScript

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Как ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π² JavaScript

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Как ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ иллюзию многопоточности, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ JavaScript? Работая ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ с двумя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, опСрационная систСма Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ участок памяти ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ пространство адрСсов, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ Π² BDT. ОБ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя исполняСмыми процСссами, обрабатывая ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ количСство Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. БистСма ставит Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ ΠΎΠ΄ΠΈΠ½ процСсс, сохраняя Π΅Π³ΠΎ адрСса, ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ с Ρ‚ΠΎΡ‡ΠΊΠΈ сохранСния.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² JavaScript нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ Π² Java.

17–19 дСкабря, Онлайн, Π‘Π΅cΠΏΠ»Π°Ρ‚Π½ΠΎ

Для этого ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ events β€” ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ исполнСния Ρ€Π°Π·Π½Ρ‹Ρ… участков ΠΊΠΎΠ΄Π° Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ врСмя. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ примСнСния асинхронности Π² JavaScript называСтся Ρ†ΠΈΠΊΠ» событий. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ этой систСмы, написав собствСнный Π΄Π²ΠΈΠΆΠΎΠΊ JS. ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° β€” Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ язык ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ².

Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ: Ρ†ΠΈΠΊΠ»Ρ‹ событий, стСк Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ асинхронный ΠΊΠΎΠ΄ Π² JavaScript

JS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ для асинхронной ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π·Π°Π΄Π°Ρ‡ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Ρ†ΠΈΠΊΠ»ΠΎΠ² событий. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ прикрСплСния ΠΊ событиям ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ наступлСнии событий исполнялся ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½Ρ‹ΠΉ ΠΊ Π½ΠΈΠΌ ΠΊΠΎΠ΄. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠ½ΡƒΡ‚ΡŒΡΡ дальшС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π²ΠΈΠΆΠΎΠΊ JS.

Π”Π²ΠΈΠΆΠΎΠΊ JS состоит ΠΈΠ· стСка, ΠΊΡƒΡ‡ΠΈ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡.

Π­Ρ‚ΠΎ структура, похоТая ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΡŽ Π½Π° массив, ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ исполняСмыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΄Π²ΠΈΠΆΠΎΠΊ JS ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Ρ‘ адрСс Π² стСк Π²Ρ‹Π·ΠΎΠ²Π°. На самом Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ рСгистры EAX, EBX, ECX, ESP, EIP. Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ процСссором для Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ исполнСния Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. EAX ΠΈ EBX ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для вычислСний, ECX ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ счётчики (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Ρ†ΠΈΠΊΠ»Π΅ for). ESP (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ стСка) содСрТит Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ адрСс стСка, EIP (ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ инструкции) β€” адрСс исполняСмой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π­Ρ‚ΠΎ Π³Ρ€ΡƒΠ±Ρ‹ΠΉ набросок Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ выглядит ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²ΠΎ врСмя исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Когда Ρ€Π°Π±ΠΎΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ a Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, адрСс (7) выталкиваСтся ΠΈΠ· стСка Π² EIP, ΠΈ исполнСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ продолТаСтся с этого адрСса.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² стСк Π²Ρ‹Π·ΠΎΠ²Π°. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ рСгистр EBP, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ значСния ΠΈΠ· стСка. Π­Ρ‚ΠΈ значСния ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, трСбуСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½ΠΈΠΌ, Π° ΡƒΠΆΠ΅ послС этого ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ адрСса Π² рСгистрах EIP ΠΈ ESP.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΡƒΡ‡Π΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ стСка, ΠΊΡƒΡ‡Π° Π½Π΅ упорядочСна. НовыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова new.

ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡

Π—Π΄Π΅ΡΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π¦ΠΈΠΊΠ» событий β€” это постоянный процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт стСк Π²Ρ‹Π·ΠΎΠ²Π°, ΠΈ Ссли стСк пуст, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ исполнСнию инструкций ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡.

Как ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, события Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для достиТСния асинхронности Π² JS. Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅ (Π½Π° английском языкС):

ΠœΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡ хранятся Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°.

Однако Ρ€Π°Π±ΠΎΡ‚Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡ нСсколько слоТнСС. Π—Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ дСйствия Ρ€Π°Π·Π±ΠΈΡ‚Ρ‹ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ.

Π’ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° событий Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½Π° ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π° обрабатываСтся ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡) :

ПослС этого Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ всС ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Π­Ρ‚ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, ΠΈ процСсс Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ опустССт.

Π”ΠΎ запуска ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ довольно ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ зависанию интСрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡΡ‚ΠΎΡŽ прилоТСния.

Из этого ΠΊΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡:

Запустив Π΅Π³ΠΎ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° событий ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ всСх ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡. МоТно Π²ΠΎΠ·Ρ€Π°Π·ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ setTimeout Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π° выполняСтся Π΄ΠΎ очистки ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡. А Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ скриптС Π΄ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° setTimeout Π½Π΅ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡.

Π­Ρ‚ΠΎ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ. Однако Π² JS ΠΊΠΎΠ΄ Π½Π΅ запускаСтся Π΄ΠΎ наступлСния события. Π­Ρ‚ΠΎ событиС Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°.

Начиная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, Π΄Π²ΠΈΠΆΠΎΠΊ JS Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Ρƒ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ выполняСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°:

β€” β€œAsynchronous Programming in Javascript CSCI 5828: Foundations of Software Engineering Lectures 18–10/20/2016” by Kenneth M. Anderson.

БлСдуя ΠΏΠΎ стопам Π”ΠΆΠ΅ΠΉΠΊΠ° ΠΡ€Ρ‡ΠΈΠ±Π°Π»ΡŒΠ΄Π°, эмулируСм Ρ†ΠΈΠΊΠ» событий. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°ΠΊΡ€ΠΎ- ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ посрСдством JS-ΠΊΠΎΠ΄Π°.

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ- ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ: setMicro (4), setMacro (5), runScript (6) ΠΈ setTimeout (7). Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² fn ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ fn Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

Π Π°Π½Π΅Π΅ ΠΌΡ‹ рассмотрСли ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°ΠΊΡ€ΠΎ- ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡. УпомянутыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ ΠΌΠ°ΠΊΡ€ΠΎ- ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅. Π’ нашСм случаС ΠΌΡ‹ просто ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² fn Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. setMicro являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, поэтому Π΅Ρ‘ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² помСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡. Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ setTimeout ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ, поэтому ΠΏΡ€ΠΈ исполнСнии ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° наша вСрсия.

ΠœΡ‹ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· массив ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° for ΠΈ исполнили Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ индСксу. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΎΡˆΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· массив ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ ΠΈ исполнили всС. НСкоторыС ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ собствСнныС элСмСнты. Π¦ΠΈΠΊΠ» ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ опустССт, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ наш JS-ΠΊΠΎΠ΄.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ наш ΠΊΠΎΠ΄ example.js, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ дСмонстрировали ΠΌΠ°ΠΊΡ€ΠΎ- ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ, Π½ΠΎ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ измСнСниями:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π² нашСм собствСнном Π΄Π²ΠΈΠΆΠΊΠ΅ JS, ΠΌΡ‹ транслируСм ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ настоящий Π΄Π²ΠΈΠΆΠΎΠΊ, поэтому ΠΌΡ‹ смогли Π²Π΅Ρ€Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² собствСнном ΠΊΠΎΠ΄Π΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РусскиС Π‘Π»ΠΎΠ³ΠΈ

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выполнСния Π΄Π²ΠΈΠΆΠΊΠ° JS: Π˜ΡΡΠ»Π΅Π΄ΡƒΠΉΡ‚Π΅ EventLoop (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Macro Task ΠΈ Micro Task)

На ΠΌΠΎΠΉ взгляд, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° исполнСния Π΄Π²ΠΈΠΆΠΊΠ° JS ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ для понимания Π΄Π²ΠΈΠΆΠΊΠ° JS. БСгодня я расскаТу ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ исполнСния Π΄Π²ΠΈΠΆΠΊΠ° JS.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ‚Π΅ΠΌΠ°Ρ…: (Π’Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅ эти понятия послС прочтСния этой ΡΡ‚Π°Ρ‚ΡŒΠΈ)

Event Loop: Event Loop
Micro Task: Micro Task
ΠœΠ°ΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡Π°: ΠœΠ°ΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡Π°

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эту ΡΡ‚Π°Ρ‚ΡŒΡŽ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ Π΄Π²Π° Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°.

1. ΠŸΠΎΡ‡Π΅ΠΌΡƒ JS являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ языком.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ слоТности, JavaScript Π±Ρ‹Π» ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅Π³ΠΎ роТдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стал основной ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ языка ΠΈ Π½Π΅ измСнится Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

2. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡?

2.1 Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ асинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ

(1) ВсС синхронныС Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅, образуяБтСк Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡοΌˆexecution context stack)。

(2) Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ основному ΠΏΠΎΡ‚ΠΎΠΊΡƒ сущСствуСт Ρ‚Π°ΠΊΠΆΠ΅ Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡Β» (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡). Пока асинхронная Π·Π°Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния, событиС помСщаСтся Π² Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡Β».

(3) Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ всС синхронныС Π·Π°Π΄Π°Ρ‡ΠΈ Π² «стСкС выполнСния» Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹, систСма ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡Β», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Π² Π½Π΅ΠΉ события. Π—Π°Ρ‚Π΅ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ асинхронныС Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ состояниС оТидания, входят Π² стСк выполнСния ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.

(4) Основной ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ шаг Π²Ρ‹ΡˆΠ΅.

2.2 МодСль исполнСния двигатСля JS

Говоря макроскопичСски, Macrotask Π²ΠΎΠΉΠ΄Π΅Ρ‚ Π² Macro Task Queue, Π° Microtask Π²ΠΎΠΉΠ΄Π΅Ρ‚ Π² Micro Task Queue. ΠœΠΈΠΊΡ€ΠΎ Π—Π°Π΄Π°Ρ‡Π° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Π΄Π²Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Β«ΠœΠΈΠΊΡ€ΠΎ Π—Π°Π΄Π°Ρ‡Π°Β» Promise Π–Π΄ΠΈΡ‚Π΅ Microtask. И Β«Tick Task QueueΒ» посвящСна Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ process.nextTick Π—Π°Π΄Π°Ρ‡Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½ΠΎΡ€ΠΌ.

Π‘ΠΊΠ°Π·Π°Π», β€˜ΠŸΠΎΡΠ»Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ всС ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡ΠΈΡ‰Π΅Π½Ρ‹.The. Π”Π²ΠΈΠΆΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡ макроса. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· всС Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡ Π³Π°Π»ΠΎΡ‡ΠΊΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ всС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡. nextTick Π‘ΡƒΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ Ρ‡Π΅ΠΌ Promise ИсполнСниС)

3. Event Loop

Основной ΠΏΠΎΡ‚ΠΎΠΊ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ события ΠΈΠ· Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡Β». Π­Ρ‚ΠΎΡ‚ процСсс являСтся Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ, поэтому вСсь Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ называСтся Event Loop.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ: Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π΅ΡΡ‚ΡŒ ошибки, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ process.nextTick Π²Π’ ΠΊΠΎΠ½Ρ†Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ «стСка выполнСния» фактичСски Π½Π΅Ρ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ TickTask, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ MacroTask ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ TickTask Π½Π° рисункС просто для Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ понимания, ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΡΡ‚ΠΎΠšΠΎΠ½Π΅Ρ† Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ «стСка выполнСния».

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π‘Π»ΠΎΠΊ-схСма выполнСния ΠΊΠΎΠ΄Π° Π² Ρ‚Ρ€Π΅Ρ… очСрСдях Π·Π°Π΄Π°Ρ‡ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

Анализ выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

ЗапуститС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ main1, process.nextTick Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ TickTask, установитС setTimeout Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ MacroTask, Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° выполнСния Promise, Π·Π°Ρ‚Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ MicroTask, Π·Π°Ρ‚Π΅ΠΌ послСднюю строку ΠΊΠΎΠ΄Π° console.log Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ main2

ПослС выполнСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π°Ρ‡Π½ΠΈΡ‚Π΅ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Ρƒ, сначала очиститС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ TickTask, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ console.log (‘process.nextTick1’); output ‘process.nextTick1; Π·Π°Ρ‚Π΅ΠΌ очиститС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ MicroTask ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ console.log (‘ ΠΎΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³Π΄Π° ‘); ΠžΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄, всС ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡ΠΈ ΠΎΡ‡ΠΈΡ‰Π°ΡŽΡ‚ΡΡ.

Π’-Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹Ρ…, Ρ†ΠΈΠΊΠ» событий Π² Node.js

Node.js Ρ‚Π°ΠΊΠΆΠ΅ являСтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ событий, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ отличаСтся ΠΎΡ‚ срСды Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Богласно ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹ΡˆΠ΅ рисунку, Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Node.js Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

(1) Π”Π²ΠΈΠΆΠΎΠΊ V8 Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ скрипт JavaScript.

(2) ПослС Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Node API.

(3οΌ‰Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° libuvΠžΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Node API. Он Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ для формирования Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий (Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ асинхронный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ V8.

(4) ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ V8 Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Node.js Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, связанных с Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ Π·Π°Π΄Π°Ρ‡Β»:process.nextTickΠΈsetImmediate, Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π½Π°ΠΌ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒ нашС ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π·Π°Π΄Π°Ρ‡Β».

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄Π΅, Ρ‚Π°ΠΊ какЀункция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, указанная ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ process.nextTick, всСгда находится Π² Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ «ΡΡ‚Π΅ΠΊ исполнСния» Π₯вост ΠΊΡƒΡ€ΠΊΠ°,Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, функция A Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ выполняСтся Π΄ΠΎ истСчСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² setTimeout, Π½ΠΎ ΠΈ функция B Ρ‚Π°ΠΊΠΆΠ΅ выполняСтся Π΄ΠΎ истСчСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания. Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, чтоЕсли сущСствуСт нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² process.nextTick (нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ), всС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ «стСкС выполнСния».

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Π°ΠΆΠ½ΠΎΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ process.nextTick ΠΈ setImmediate:ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ process.nextTick всСгда Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ «стСкС выполнСния», ΠΈ для выполнСния Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… setImmediate ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ нСсколько Ρ†ΠΈΠΊΠ»ΠΎΠ².

ЀактичСски, это ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ setImmediate Π±Ρ‹Π» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Node.js вСрсии 10.0, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС рСкурсивный Π²Ρ‹Π·ΠΎΠ² process.nextTick, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ бСсконСчным, ΠΈ основной ΠΏΠΎΡ‚ΠΎΠΊ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ событий»!

ЀактичСски, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Π²Ρ‹ Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ рСкурсивный process.nextTick, Node.js выдаст ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ с ΠΏΡ€ΠΎΡΡŒΠ±ΠΎΠΉ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ setImmediate.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ функция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, указанная Π² process.nextTick, запускаСтся Π² этом Β«Ρ†ΠΈΠΊΠ»Π΅ событий», Π° setImmediate указываСтся Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Β«Ρ†ΠΈΠΊΠ»Π΅ событий», ясно, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ всСгда происходит Ρ€Π°Π½ΡŒΡˆΠ΅, Ρ‡Π΅ΠΌ послСдний, ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ выполнСния Π’Π°ΠΊΠΆΠ΅ высокий (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ нСобходимости ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Β«ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Ρ‡Β»).

6 Ρ„Π°Π· событийного Ρ†ΠΈΠΊΠ»Π° Π² ΡƒΠ·Π»Π΅

Π¦ΠΈΠΊΠ» событий nodejs Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° 6 этапов, Ρ€ΠΎΠ»ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ этапа Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ( process.nextTick() Π‘ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² ΠΊΠΎΠ½Ρ†Π΅ 6 этапов Вторая ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΡΡ‚Π°Ρ‚ΡŒΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° process.nextTick() Как ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² события вводится Π² Ρ†ΠΈΠΊΠ» событий, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· uv_run() НС Π½Π°ΠΉΠ΄Π΅Π½ process.nextTick() Как это связано):

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Π² Ρ†ΠΈΠΊΠ»Π΅ событий Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ этапы. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ этап ΠΈΠΌΠ΅Π΅Ρ‚ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вводится ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ этап, ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ взят ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ для выполнСния. Когда ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ пуста ΠΈΠ»ΠΈ число Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² достигаСт максимального числа систСмы, начинаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ этих ΡˆΠ΅ΡΡ‚ΠΈ этапов называСтся Ρ€Π°ΡƒΠ½Π΄ΠΎΠΌ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РусскиС Π‘Π»ΠΎΠ³ΠΈ

JS ΠΌΠ°ΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡Π°, ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡Π°

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли вСсь ΠΊΠΎΠ΄ выполняСтся синхронно, это Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ с ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ†Π°, слСдуСт Π»ΠΈ Π½Π°ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π·Π°Ρ†ΠΈΠΊΠ»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠ΄ΠΈΡ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π»ΠΈ ΠΌΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚?Π­Ρ‚ΠΎ всС Ρ€Π°Π²Π½ΠΎ Ρ‡Ρ‚ΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² рСсторан Π·Π° Π΅Π΄ΠΎΠΉ. НСльзя ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ тСбя Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠ·Π±ΠΈΠ²Π°Ρ‚ΡŒ, Ссли Ρ‚Ρ‹ пойдСшь Π½Π° ΠΊΡƒΡ…Π½ΡŽ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ·ΠΎΠ²Π΅ΡˆΡŒ людСй Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, сущСствуСт концСпция асинхронных событий: зарСгистрируйтС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ сСтСвой запрос, ΠΌΡ‹ сообщим основной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ мСня послС получСния Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΡŒ.
Π—Π°Ρ‚Π΅ΠΌ, послС асинхронного Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ, ΠΌΡ‹ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΠΌ нас, Π½ΠΎ Π² это врСмя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, поэтому Π΄Π°ΠΆΠ΅ Ссли асинхронноС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ стороны ΠΈ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, какая Π°ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Π΅.
НапримСр, Ссли Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ, Ссли Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€ΠΈΠ±Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, Π½ΠΎ Ρƒ вас всС Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ с Ρ‡Π΅ΠΌ ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π½Π΅ смоТСт сначала Π΅Ρ…Π°Ρ‚ΡŒ Π² машинС. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° Π½Π΅ сядСтС Π² ΠΌΠ°ΡˆΠΈΠ½Ρƒ послС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ вопроса.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ ΠΈ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ

Π­Ρ‚ΠΎ всС Ρ€Π°Π²Π½ΠΎ Ρ‡Ρ‚ΠΎ ΠΈΠ΄Ρ‚ΠΈ Π² Π±Π°Π½ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ бизнСсом.
Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ слова, ΠΊΠ°ΠΊ Β«Π’Π°Ρˆ Π½ΠΎΠΌΠ΅Ρ€ XX, Π° ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ XX Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΒ».

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²ΠΎ врСмя выполнСния ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄Π΅Π» Ρƒ ΠΏΡ€ΠΈΠ»Π°Π²ΠΊΠ°, ΠΏΠΎΠΆΠΈΠ»ΠΎΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ внСсти Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚. ПослС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ‚Π° кассир попросит старика Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π•ΡΡ‚ΡŒ Π»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ бизнСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ? Π’ это врСмя старик Π΄ΡƒΠΌΠ°Π» ΠΎΠ± этом: Β«Π’ послСднСС врСмя ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ P2P-Π³Ρ€ΠΎΠΌΠΎΠ², Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ финансовый ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚?Β» ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, я Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ старику: Β«Π’Ρ‹ поднимСшь Π½ΠΎΠΌΠ΅Ρ€ ΠΈ Π²Π΅Ρ€Π½Π΅ΡˆΡŒΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΒ».
Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ваша ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ бизнСсом, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ старик Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» «Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ благосостояниСм«Π˜ ΠΎΡ‚Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΠ».
ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, старик всС Π΅Ρ‰Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚Ρƒ? ΠΈΠ»ΠΈΠšΡƒΠΏΠΈΡ‚Π΅ Π΅Ρ‰Π΅ памятныС ΠΌΠΎΠ½Π΅Ρ‚Ρ‹οΌŸ
НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ссли кассир ΠΌΠΎΠΆΠ΅Ρ‚ Π΅ΠΉ ΠΏΠΎΠΌΠΎΡ‡ΡŒ, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π½ΡΡ‚ΡŒΡΡ вашим бизнСсом. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚: Ρ‚Π²ΠΎΠΉ дядя всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π²ΠΎΠΈΠΌ дядСй
Если тСкущая ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°.

Π˜Ρ‚Π°ΠΊ, Π΅ΡΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² вопросах ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π±Π»ΠΎΠ³Π°Ρ…:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

setTimeout БущСствуСт ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π°, ΠΈ Promise.then Π­Ρ‚ΠΎ типичная ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π°, ΠΈ порядок выполнСния Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° выводится Π² соотвСтствии с сСрийным Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ.

ВсС асинхронноС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ΠΎ, относится ΠΊ части ΠΊΠΎΠ΄Π° Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ события.
ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ new Promise Код, выполняСмый Π² процСссС создания экзСмпляра, синхронизируСтся, ΠΈ then ЗарСгистрированный ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² выполняСтся асинхронно.
ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния синхронного ΠΊΠΎΠ΄Π° Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ΡΡŒ Π½Π°Π·Π°Π΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° Π»ΠΈ асинхронная Π·Π°Π΄Π°Ρ‡Π°, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ², ΠΈ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π΄ΠΎ выполнСния ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ.
Π˜Ρ‚Π°ΠΊ, я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π²ΠΎΠ΄ 1、2、3、4 。

+ Π§Π°ΡΡ‚ΡŒ прСдставляСт ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся синхронно

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ setTimeout Π’Π°ΠΉΠΌΠ΅Ρ€ Π±Ρ‹Π» установлСн (эквивалСнтно Π²Π·ΡΡ‚ΠΈΡŽ числа), Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ процСсс Promise ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ бизнСса Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ).

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

П.Π‘. Π²ΠžΠ±Π΅Ρ‰Π°Π½ΠΈΠ΅ / A + тСхничСскиС характСристикив Promise РСализация ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Π½ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ согласиС ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ (ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Chrome Π­Ρ‚ΠΎ сдСлано), Promise Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊ ΠΌΠΈΠΊΡ€ΠΎ-миссионСрскому Π»Π°Π³Π΅Ρ€ΡŽ

ΠœΠ°ΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡Π°

#Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Node
I/O
setTimeout
setInterval
setImmediate
requestAnimationFrame

НСкоторыС мСста Π±ΡƒΠ΄ΡƒΡ‚ пСрСчислСны UI Rendering Π‘ΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Ρ‚ΠΎΠΆΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π°, Π½ΠΎ я Ρ‡ΠΈΡ‚Π°ΡŽΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ спСцификации HTMLПозТС Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ это явно шаг ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅.
requestAnimationFrame Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Π·ΠΎΠ²Π΅ΠΌ это ΠΌΠ°ΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π΅ΠΉ, requestAnimationFrame Π²ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ MDNΠ§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π΄ΠΎ пСрСрисовки ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ страницы, пСрСрисовка Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт ΠΊΠ°ΠΊ шаг ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈ этот шаг ΠΏΠΎΠ·ΠΆΠ΅, Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ

ΠœΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ

#Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Node
process.nextTick
MutationObserver
Promise.then catch finally

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Event-Loop

Π’Ρ‹ΡˆΠ΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.
Но вСрнСмся ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, JavaScript Π­Ρ‚ΠΎ однопроцСссный язык, ΠΈ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ нСсколько Π·Π°Π΄Π°Ρ‡ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, поэтому ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ? Нам Π½ΡƒΠΆΠ½Π° такая Π»ΠΎΠ³ΠΈΠΊΠ° суТдСния.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ бизнСса кассир ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ прСдприятия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.(ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ)
И послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎ сообщил, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΎ, кассир пошСл, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΆΠ΄ΡƒΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΡΡ‚ΡŒΡΡ бизнСсом.(Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ эту ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Π΅ΡΡ‚ΡŒ Π»ΠΈ какая-Π»ΠΈΠ±ΠΎ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ)
Π­Ρ‚ΠΎΡ‚ процСсс ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ являСтся Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΌ, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈ такая опСрация называСтся Event Loop 。(Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ простоС описаниС, Π½Π° самом Π΄Π΅Π»Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС)

И, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, кассир ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Π²Π΅Ρ‰ΡŒ Π·Π° Ρ€Π°Π·, Π΄Π°ΠΆΠ΅ Ссли эти Π²Π΅Ρ‰ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ сущСствуСт ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ такая Π»ΠΎΠ³ΠΈΠΊΠ°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° использования Π΄Π²ΡƒΡ… for Π¦ΠΈΠΊΠ» выраТаСтся ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° push Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ увСличиваСтся динамичСски.

И Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ясно, Event Loop Он просто ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π°ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Π²Ρ‹Π·Π²Π°Π½Ρ‹, Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° всС Π΅Ρ‰Π΅ выполняСтся Π² процСссС.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

Π’Ρ‹ΡˆΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, ΠΈ Event Loop Роль, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠ²Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅?
ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ, это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ послС ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡Π° Π½Π° самом Π΄Π΅Π»Π΅ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· шагов ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ)

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ DOM Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

НСкоторыС нСбольшиС ΡΡŽΡ€ΠΏΡ€ΠΈΠ·Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π­Ρ‚ΠΎ всС Ρ€Π°Π²Π½ΠΎ Ρ‡Ρ‚ΠΎ Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² рСсторан Π·Π° Π΅Π΄ΠΎΠΉ. ΠžΡ„ΠΈΡ†ΠΈΠ°Π½Ρ‚ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° ΠΊΡ€ΠΈΡ‡Π°Π». XX говяТья лапша Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° даст Π²Π°ΠΌ Ρ‚Ρ€ΠΈ миски говяТьСй лапши.
Π‘ΠΌ Π²Ρ‹ΡˆΠ΅Tasks, microtasks, queues and schedulesΠ•ΡΡ‚ΡŒ анимированная вСрсия ΡΡ‚Π°Ρ‚ΡŒΠΈ

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² ΡƒΠ·Π»Π΅

Π£Π·Π΅Π» Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ, Π½ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Event Loop Π‘Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π²ΠΎΡ‚Π£Π·Π΅Π» ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ докумСнтацииАдрСс.

Волько Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ API Node Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π΄Π²Π° Π½ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: ΠΌΠΈΠΊΡ€ΠΎΠ·Π°Π΄Π°Ρ‡Π° process.nextTick И ΠΌΠ°ΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ setImmediate 。

Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ setImmediate ΠΈ setTimeout

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, setImmediate На этот Ρ€Π°Π· Event Loop ВызываСтся послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния.
setTimeout ВыполняСтся послС расчСта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ.

Если Π²Π°ΠΌ интСрСсно, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Если Π²Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ это нСсколько Ρ€Π°Π·, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Но Ссли Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ ΠΏΠΎΠ·ΠΆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ setTimeout ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π² setImmediate Π‘Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π½ΡŒΡˆΠ΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Если Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ макроса, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ setImmediate Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

process.nextTick

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, это ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΎΠ³ Promise ΠΈ MutationObserver РСализация ΠΌΠΈΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вставлСна ​​в любоС врСмя Π²ΠΎ врСмя выполнСния ΠΊΠΎΠ΄Π° nextTick И Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡ€ΠΎ-Π·Π°Π΄Π°Ρ‡ΠΈ.

Одним ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования являСтся Ρ€Π°Π±ΠΎΡ‚Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… классов привязки событий:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ создан Lib ΠžΠ±ΡŠΠ΅ΠΊΡ‚ выполняСтся синхронно ΠΈ отправляСтся сразу послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ создания экзСмпляра. init Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅.
ΠΈ основная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° внСшнСм ΡƒΡ€ΠΎΠ²Π½Π΅ Π΅Ρ‰Π΅ Π½Π΅ Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ lib.on(‘init’) Π­Ρ‚ΠΎΡ‚ шаг ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΡ событий.
Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ события ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, ΠΈ событиС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ снова послС рСгистрации ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ process.nextTick Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡ€ΠΎ ΠΈ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ Π² js

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ основного процСсса Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° простаиваСт Event Loop ΠŸΡ€ΠΎΡ†Π΅ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ, Ссли Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΌΠΈΠΊΡ€ΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ init Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *