Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠ°ΠΊΡΠΎ ΠΈ ΠΌΠΈΠΊΡΠΎ Π·Π°Π΄Π°ΡΠΈ Π² 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
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ»Π»ΡΠ·ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ 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 Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π»Ρ Π»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, ΠΈΠ»ΠΈ ΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ ΡΡΠΎΠΠΎΠ½Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Β«ΡΡΠ΅ΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡΒ».
ΠΠ»ΠΎΠΊ-ΡΡ Π΅ΠΌΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΡΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ Π·Π°Π΄Π°Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
ΠΠ½Π°Π»ΠΈΠ· Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π²ΡΠ²Π΅Π΄ΠΈΡΠ΅ 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 ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ, Π½ΠΎ Π΅Π³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΡΠ΅Π΄Ρ Π±ΡΠ°ΡΠ·Π΅ΡΠ°.
Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π²ΡΡΠ΅ ΡΠΈΡΡΠ½ΠΊΡ, ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ 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 ΠΌΠ°ΠΊΡΠΎ Π·Π°Π΄Π°ΡΠ°, ΠΌΠΈΠΊΡΠΎ Π·Π°Π΄Π°ΡΠ°
ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Π΅ΡΡ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ°, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ Π½Π°ΠΌ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ Π·Π°ΡΠΈΠΊΠ»ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ ΡΡΠ΄ΠΈΡΡ, ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π»ΠΈ ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ?ΠΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΎ Ρ
ΠΎΠ΄ΠΈΡΡ Π² ΡΠ΅ΡΡΠΎΡΠ°Π½ Π·Π° Π΅Π΄ΠΎΠΉ. ΠΠ΅Π»ΡΠ·Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ΅Π±Ρ Π±ΡΠ΄ΡΡ ΠΈΠ·Π±ΠΈΠ²Π°ΡΡ, Π΅ΡΠ»ΠΈ ΡΡ ΠΏΠΎΠΉΠ΄Π΅ΡΡ Π½Π° ΠΊΡΡ
Π½Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΈΠ·ΠΎΠ²Π΅ΡΡ Π»ΡΠ΄Π΅ΠΉ Π³ΠΎΡΠΎΠ²ΠΈΡΡ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΡ
ΡΠΎΠ±ΡΡΠΈΠΉ: Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠΏΡΠ°Π²ΡΡΠ΅ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ, ΠΌΡ ΡΠΎΠΎΠ±ΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠΈΡΡ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
, Π° Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΡ.
ΠΠ°ΡΠ΅ΠΌ, ΠΏΠΎΡΠ»Π΅ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ, ΠΌΡ ΡΠ²Π΅Π΄ΠΎΠΌΠΈΠΌ Π½Π°Ρ, Π½ΠΎ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π΄Π΅Π»Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΎ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΡΠΎΡΠΎΠ½Ρ ΠΈ Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ, ΠΏΠΎΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊΠ°Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΡΡΡ Π±ΡΠ»Π° Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΅Π΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΌ, Π΅ΡΠ»ΠΈ Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΡΠΈΠ±ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ, Π½ΠΎ Ρ Π²Π°Ρ Π²ΡΠ΅ Π΅ΡΠ΅ Π΅ΡΡΡ Ρ ΡΠ΅ΠΌ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ, Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ½Π°ΡΠ°Π»Π° Π΅Ρ
Π°ΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π΅. ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠ΄Π΅ΡΠ΅ Π² ΠΌΠ°ΡΠΈΠ½Ρ ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΎΠΏΡΠΎΡΠ°.
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ°ΠΌΠΈ ΠΈ ΠΌΠ°ΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ°ΠΌΠΈ
ΠΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΎ ΠΈΠ΄ΡΠΈ Π² Π±Π°Π½ΠΊ, ΡΡΠΎΠ±Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π±ΠΈΠ·Π½Π΅ΡΠΎΠΌ.
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠ°ΠΊΠΈΠ΅ ΡΠ»ΠΎΠ²Π°, ΠΊΠ°ΠΊ Β«ΠΠ°Ρ Π½ΠΎΠΌΠ΅Ρ XX, Π° ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΈΠΌ XX ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΒ».
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠΊΡΠΎ-Π·Π°Π΄Π°Ρ. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈ Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π΄Π΅Π» Ρ ΠΏΡΠΈΠ»Π°Π²ΠΊΠ°, ΠΏΠΎΠΆΠΈΠ»ΠΎΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΠ΅ΡΠ΅Π΄ Π²Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅Ρ Π²Π½Π΅ΡΡΠΈ Π΄Π΅ΠΏΠΎΠ·ΠΈΡ. ΠΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ° ΠΊΠ°ΡΡΠΈΡ ΠΏΠΎΠΏΡΠΎΡΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ° Π²Π΅ΡΠ½ΡΡΡ ΠΡΡΡ Π»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ Π±ΠΈΠ·Π½Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ? Π ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΠ°ΡΠΈΠΊ Π΄ΡΠΌΠ°Π» ΠΎΠ± ΡΡΠΎΠΌ: Β«Π ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ P2P-Π³ΡΠΎΠΌΠΎΠ², Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ?Β» ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠ°ΡΠΈΠΊΡ: Β«Π’Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΡΡ Π½ΠΎΠΌΠ΅Ρ ΠΈ Π²Π΅ΡΠ½Π΅ΡΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΡΒ».
Π’Π°ΠΊ ΡΡΠΎ Π²Π°ΡΠ° ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Π±ΠΈΠ·Π½Π΅ΡΠΎΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ°ΡΠΈΠΊ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ» «Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π»Π°Π³ΠΎΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ«Π ΠΎΡΡΠΎΠ»ΠΊΠ½ΡΠ».
ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΡΠ°ΡΠΈΠΊ Π²ΡΠ΅ Π΅ΡΠ΅ Ρ
ΠΎΡΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡΠΠΎΠ»ΡΡΠΈΡΡ Π΄ΡΡΠ³ΡΡ ΠΊΡΠ΅Π΄ΠΈΡΠ½ΡΡ ΠΊΠ°ΡΡΡ? ΠΈΠ»ΠΈΠΡΠΏΠΈΡΠ΅ Π΅ΡΠ΅ ΠΏΠ°ΠΌΡΡΠ½ΡΠ΅ ΠΌΠΎΠ½Π΅ΡΡοΌ
ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΊΠ°ΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π΅ΠΉ ΠΏΠΎΠΌΠΎΡΡ, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π½ΡΡΡΡΡ Π²Π°ΡΠΈΠΌ Π±ΠΈΠ·Π½Π΅ΡΠΎΠΌ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠΈ.
ΠΡΠΎ Π·Π½Π°ΡΠΈΡ: ΡΠ²ΠΎΠΉ Π΄ΡΠ΄Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠ²ΠΎΠΈΠΌ Π΄ΡΠ΄Π΅ΠΉ
ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ°Ρ ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ° Π½Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΌΠ°ΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°.
ΠΡΠ°ΠΊ, Π΅ΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π²ΠΎΠΏΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ²ΡΡ ΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π±Π»ΠΎΠ³Π°Ρ :
setTimeout Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΌΠ°ΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠ°, ΠΈ Promise.then ΠΡΠΎ ΡΠΈΠΏΠΈΡΠ½Π°Ρ ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ°, ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΠ΅ΡΠΈΠΉΠ½ΡΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ.
ΠΡΠ΅ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²Π²Π΅Π΄Π΅Π½ΠΎ, ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠΎΠ±ΡΡΠΈΡ.
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ new Promise ΠΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ, ΠΈ then ΠΠ°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ.
ΠΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π²Π΅ΡΠ½ΠΈΡΠ΅ΡΡ Π½Π°Π·Π°Π΄, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π·Π°Π²Π΅ΡΡΠ΅Π½Π° Π»ΠΈ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², ΠΈ ΠΌΠΈΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π΄ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠΈ.
ΠΡΠ°ΠΊ, Ρ ΠΏΠΎΠ»ΡΡΠΈΠ» ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ Π²ΡΠ²ΠΎΠ΄ 1γ2γ3γ4 γ
+ Π§Π°ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ
ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ setTimeout Π’Π°ΠΉΠΌΠ΅Ρ Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ (ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎ Π²Π·ΡΡΠΈΡ ΡΠΈΡΠ»Π°), Π° Π·Π°ΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Promise ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΠΈΠ·Π½Π΅ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ).
Π.Π‘. Π²ΠΠ±Π΅ΡΠ°Π½ΠΈΠ΅ / 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 γ(ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅)
Π, ΠΊΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΡΠ΅, ΠΊΠ°ΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ Π²Π΅ΡΡ Π·Π° ΡΠ°Π·, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠΈ Π²Π΅ΡΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°Ρ, ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ Π»ΠΎΠ³ΠΈΠΊΠ°:
ΠΡΠΈΡΠΈΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π²ΡΡ for Π¦ΠΈΠΊΠ» Π²ΡΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»Π΅Π³ΠΊΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π° push Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°ΡΠΈ), ΡΠ°ΠΊ ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ.
Π ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΡΡΠ½ΠΎ, Event Loop ΠΠ½ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΡΠΎ, ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π²ΡΠ·Π²Π°Π½Ρ, ΡΠ΅Π°Π»ΡΠ½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° Π²ΡΠ΅ Π΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
ΠΡΡΠ΅ ΠΊΡΠ°ΡΠΊΠΎ ΠΎΠ±ΡΡΡΠ½ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ Π΄Π²ΡΠΌΡ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ, ΠΈ Event Loop Π ΠΎΠ»Ρ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΎΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ΅?
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ, ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΌΠΈΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠΈ (ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΌΠΈΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠ° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°Π³ΠΎΠ² ΠΌΠ°ΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠΈ)
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ DOM Π‘ΡΡΡΠΊΡΡΡΠ°:
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΡΡΡΠΏΡΠΈΠ·Ρ
ΠΡΠΎ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΎ Ρ
ΠΎΠ΄ΠΈΡΡ Π² ΡΠ΅ΡΡΠΎΡΠ°Π½ Π·Π° Π΅Π΄ΠΎΠΉ. ΠΡΠΈΡΠΈΠ°Π½Ρ ΡΡΠΈ ΡΠ°Π·Π° ΠΊΡΠΈΡΠ°Π». XX Π³ΠΎΠ²ΡΠΆΡΡ Π»Π°ΠΏΡΠ° Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠ½Π° Π΄Π°ΡΡ Π²Π°ΠΌ ΡΡΠΈ ΠΌΠΈΡΠΊΠΈ Π³ΠΎΠ²ΡΠΆΡΠ΅ΠΉ Π»Π°ΠΏΡΠΈ.
Π‘ΠΌ Π²ΡΡΠ΅Tasks, microtasks, queues and schedulesΠΡΡΡ Π°Π½ΠΈΠΌΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠ°ΡΡΠΈ
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π² ΡΠ·Π»Π΅
Π£Π·Π΅Π» ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ, Π½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Event Loop ΠΡΠ°ΡΠ·Π΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, Π²ΠΎΡΠ£Π·Π΅Π» ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈΠΠ΄ΡΠ΅Ρ.
Π’ΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ API Node Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π΄Π²Π° Π½ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ: ΠΌΠΈΠΊΡΠΎΠ·Π°Π΄Π°ΡΠ° process.nextTick Π ΠΌΠ°ΠΊΡΠΎ Π·Π°Π΄Π°ΡΠΈ setImmediate γ
Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ setImmediate ΠΈ setTimeout
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅, setImmediate ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Event Loop ΠΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
setTimeout ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΡΠ΅ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΏΠΎΠ·ΠΆΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ setTimeout ΠΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π² setImmediate Π‘ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ°Π½ΡΡΠ΅:
ΠΡΠ»ΠΈ Π² Π΄ΡΡΠ³ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ setImmediate Π‘Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅:
process.nextTick
ΠΠ°ΠΊ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π°Π½Π°Π»ΠΎΠ³ Promise ΠΈ MutationObserver Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠΈΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠ°Π²Π»Π΅Π½Π° ββΠ² Π»ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° nextTick Π Π±ΡΠ΄Π΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΌΠ°ΠΊΡΠΎ-Π·Π°Π΄Π°ΡΠΈ.
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ:
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π½ Lib ΠΠ±ΡΠ΅ΠΊΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°. init Π‘ΠΎΠ±ΡΡΠΈΠ΅.
ΠΈ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° Π²Π½Π΅ΡΠ½Π΅ΠΌ ΡΡΠΎΠ²Π½Π΅ Π΅ΡΠ΅ Π½Π΅ Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ lib.on(‘init’) ΠΡΠΎΡ ΡΠ°Π³ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ, ΠΈ ΡΠΎΠ±ΡΡΠΈΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ process.nextTick Π§ΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ:
ΠΡΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½, ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΡΡΠ°ΠΈΠ²Π°Π΅Ρ Event Loop ΠΡΠΎΡΠ΅ΡΡ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΌΠΈΠΊΡΠΎ Π·Π°Π΄Π°ΡΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ init Π‘ΠΎΠ±ΡΡΠΈΠ΅.