[ΠΠΠ_ΠΠΠ£ΠΠ] Π ΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅ΠΎ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΡΠΎ middleware ΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΅ΡΠ΅Π· middleware ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠΌΠΈΠ½Π³ΠΈ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΡΡΠΈΡ
Π²Π½ΡΡΡΠΈ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΌΡ Π²Π°ΠΌ ΠΏΠ°ΠΊΠ΅ΡΡ Β«ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΒ», ΡΠ°Π½Π΅Π΅ ΠΌΡ Π΅Π³ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π² Π°ΡΠΏΠ΅ΠΊΡΠ΅ ΠΎΡΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ. ΠΡΠΎΡΠΎΠΉ Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ΡΡΠΈ Π² ΡΠ΅Π±Π΅ Π½Π΅ΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ context value. ΠΡΠΈΡΠ΅ΠΌ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ, ΡΠΎΡΠ½Π΅Π΅, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π±ΡΠ΄Π΅Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠΈ. ΠΡ, ΡΠΎ Π΅ΡΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ tread safe local storage, Π½ΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΡΠΎ Π΅ΡΡΡ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π² ΠΊΠΎΠ΄Π΅, ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ main, ΡΡΡ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ, ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ multiplex Π·Π°ΠΏΡΠΎΡΠΎΠ², ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΡΠ΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΌ ΠΎΠ΄ΠΈΠ½ middleware ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Π·Π°ΠΏΡΠΎΡ. ΠΡΠΎΠ΄Π΅ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ. ΠΠΎ ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ°ΠΉΠΌΠΈΠ½Π³ middleware, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ Π² load posts. ΠΡΠ°ΠΊ, ΡΠ½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈΠ· Π½Π°ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, request, ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π½Π°ΠΏΠΈΡΠ°Π» Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΌ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ. Π Π½Π΅Π΅ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΠΈΠΌΡ ΡΠ°Π±ΠΎΡΡ. Π― Π²ΡΠ·ΡΠ²Π°Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π² Π²ΠΈΠ΄Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ°Π±ΠΎΡ, ΡΡΡ Ρ Π΄Π΅Π»Π°Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°ΠΉΠΌ Π±Π΅Π· emulate, Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ ΠΏΡΠΎ ΡΡΠΎ Π΄Π°Π»ΡΡΠ΅, Π·Π°ΡΠ΅ΠΌ, ΠΈ Π΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ, ΠΈ Π²ΡΠ²ΠΎΠΆΡ, ΡΡΠΎ request done, Π²ΡΠ΅. Π’ΠΎ Π΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΡ
Π²Ρ Π²ΠΈΠ΄Π΅Π»ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ Ρ ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Ρ Π² Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈ Π΄Π°Π»ΡΡΠ΅ Ρ ΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Ρ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΠΎ Π² ΡΡΠ½ΠΊΡΠΈΡ, Π΄Π°ΠΆΠ΅ Π½Π΅ Π΄Π΅Π»Π°Ρ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎ Π²Π½ΡΡΡΠΈ emulateWork. ΠΡ ΡΠΎΠΆΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. ΠΠ½ΡΡΡΠΈ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ trackContextTimings, ΠΊΡΠ΄Π° Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Ρ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΌΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΈΠΌΡ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΡΠ΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°Ρ, ΠΈ Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΠΎΡΠ°. Π― Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ, ΡΡΠΎ Π² defer Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ defer, ΡΠΎ Π΅ΡΡΡ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π²ΠΎΡ Π·Π΄Π΅ΡΡ, ΠΏΠΎΡΡΠΈΡΠ°Π΅ΡΡΡ, Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΡΠ»Π΅ sleep. ΠΠΊΠ΅ΠΉ. ΠΡΠΎΠ΄Π΅ Π±Ρ ΠΌΡ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ, ΡΡΠΎ-ΡΠΎ ΠΏΠΎΡΡΠΈΡΠ°Π»ΠΈ, Π΄Π°Π»Π΅Π΅ Ρ Π²Π°ΠΌ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π° ΠΏΠΎΡΠΎΠΌ ΠΌΡ ΡΠ³Π»ΡΠ±ΠΈΠΌΡΡ Π² Π΄Π΅ΡΠ°Π»ΠΈ middleware. ΠΡΠ°ΠΊ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, Π²ΠΎΡ ΠΌΠΎΠΉ Π·Π°ΠΏΡΠΎΡ, posts 42. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, Ρ Π²ΡΠ²ΠΎΠΆΡ Π½Π° ΡΠΊΡΠ°Π½ Π²ΡΡ ΡΠ°Π±ΠΎΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΌ Π±ΡΠ»Π°, ΡΠΎ Π΅ΡΡΡ Π²ΠΎΡ ΠΌΠΎΠΉ checkCashe, loadPosts, ΠΏΡΠΈΡΠ΅ΠΌ ΠΈΡ
Π±ΡΠ»ΠΎ Π²ΡΠ·Π²Π°Π½ΠΎ Π°ΠΆ ΡΡΠΈ ΡΠ°Π·Π°, Sidebar, Comments, ΠΈ Π²ΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΡΡ Π·Π°ΠΏΡΠΎΡ ΠΎΠ±ΡΠΈΠΉ, Π²ΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΠΏΠΎΡΡΠΈΡΠ°Π», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, trackContextTimings, ΠΈ Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ unknown Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΠΎΡΡΠΈ Π΄Π΅ΡΡΡΡ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· Ρ Π½Π°Ρ Π²ΠΎΡ ΡΡΠΎ Π²ΡΠ΅ΠΌΡ. Π’ΠΎ Π΅ΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΏΠΎΠΊΡΡΡΠΎ Π²ΠΎΡ ΡΡΠΈΠΌ Π²ΠΎΡ ΠΎΠ±ΡΠΈΠΌ ΡΠ°ΠΉΠΌΠΈΠ½Π³ΠΎΠΌ. Π’ΠΎ Π΅ΡΡΡ ΡΡΡΠΊΠ° ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΌΠΎΡΡΠ΅ΡΡ, Π»ΠΈΠ±ΠΎ ΠΊΠ°ΠΊΠ°Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ Π½Π°ΡΠ°Π»Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΎΠ»ΡΡΠ΅ Π»ΠΈΠ±ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΡΡΠΊ, Π»ΠΈΠ±ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΎΠ±ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ, ΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ. ΠΠ΄ΡΡΠ³ ΡΠ°ΠΌ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π½Π°ΡΠ°Π» ΡΡΠΏΠΈΡΡ Π»ΠΈΠ±ΠΎ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΡ ΡΡΠ°Π»ΠΈ Π΄Π΅Π»Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊΡΠ΄Π°-ΡΠΎ, Π»ΠΈΠ±ΠΎ ΠΎΠ½ΠΈ ΡΡΠ°Π»ΠΈ Π΄ΠΎΠ»ΡΡΠ΅. ΠΠΊΠ΅ΠΉ. Π‘ ΠΏΠΎΠ»ΡΠ·ΠΎΠΉ ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΡΠΎ Π²Π°ΠΆΠ½Π°Ρ Π²Π΅ΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²Π½ΡΡΡΠΈ. ΠΠ°ΡΠ½Π΅ΠΌ ΠΌΡ Ρ timingMiddleware. Π’Π°ΠΊ. Π‘Π½Π°ΡΠ°Π»Π° Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. Π§ΡΠΎ Ρ Π΄Π΅Π»Π°Ρ? Π£ ΠΌΠ΅Π½Ρ Π² Π·Π°ΠΏΡΠΎΡΠ΅ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. ΠΠ°Π²Π°ΠΉΡΠ΅ Ρ Π»ΡΡΡΠ΅ Π½Π°ΠΏΠΈΡΡ Π²ΠΎΡ ΡΠ°ΠΊ. Π ΠΌΠΎΠ΅ΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡ, ΠΈ request. ΠΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ context. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π»Π΅Π΅ Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π½Π΅Π³ΠΎ, ΡΠΎ Π΅ΡΡΡ Ρ Π³ΠΎΠ²ΠΎΡΡ context withValue, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΊΠ»ΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Ρ Ρ
ΠΎΡΡ ΠΊ ΡΡΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ, ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΡΠ²ΠΎΡ ΡΡΡΡΠΊΡΡΡΡ, Π΅Π΅ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Ρ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ Π² ΠΎΠ±ΡΠ΅ΠΌ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΡΡΡΡΠΊΡΡΡΡ. ΠΠΎΡ. Π§ΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ? Π£ Π½Π°Ρ ΡΠΎΠ·Π΄Π°Π»ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π»Π΅ΠΆΠΈΡ ΠΏΠΎ timing scale. ΠΡΠΈ ΡΡΠΎΠΌ ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ, ΡΡΠΎ copy on right, ΠΠΊΠ΅ΠΉ, ΡΠ΅ΠΏΠ΅ΡΡ Π² defer Ρ Π΄Π΅Π»Π°Ρ logContextTimings, ΠΊΡΠ΄Π° ΠΎΠΏΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Ρ ΡΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, url ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ, ΡΠΎΡΠ½Π΅Π΅, Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΠΎΡΠ°. ΠΡ Π΄Π°Π»ΡΡΠ΅ Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡ Π½Π°Ρ Π·Π°ΠΏΡΠΎΡ. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ middleware ΠΈ Ρ ΠΎΠ±Π΅ΡΠ½Ρ ΡΠ²ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎ ΠΌΠ½Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡ, ΡΠΆΠ΅ ΠΌΠΎΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΡΠ°ΠΌ ΡΠΆΠ΅ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Ρ value timings. ΠΡΠΎΠ΄Π΅ Π±Ρ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΌΡ ΡΡΠΎ-ΡΠΎ ΠΊΡΠ΄Π°-ΡΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΠ»ΠΈ, ΡΡΠΎ-ΡΠΎ Π΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠΈΡΠ°Π΅ΡΡΡ? ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ trackContextTimings. Π₯ΠΎΡΠΎΡΠΎ. Π― ΠΏΠΎΠ»ΡΡΠ°Ρ ΡΠΆΠ΅ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Ρ ΡΡΠ΄Π° ΠΏΠΎΠ»ΡΡΠΈΠ». ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ΅, ΡΠΎ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΡΠ°ΠΌ Π²ΡΠ΅ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΠΎΡΡΠΎΠΌΡ Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠΎΠΉ ΠΊΠ»ΡΡ, Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ value ΠΈ ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΡΡΠ°ΡΡΡ Π΅Π³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΊ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
ContextTimings. Π ΠΏΡΠΎΠ²Π΅ΡΡΡ. ΠΡΠ»ΠΈ Π²Π΄ΡΡΠ³ ΡΠ°ΠΌ Π½Π΅Ρ ΡΡΠΎΠ³ΠΎ ContextTiming ΠΈΠ»ΠΈ Ρ Π΅Π³ΠΎ Π½Π΅ ΡΠΌΠΎΠ³ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π»ΠΈΠ±ΠΎ ΡΠ°ΠΌ Π»Π΅ΠΆΠΈΡ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½ΡΡ
, ΠΊΡΠΎ-ΡΠΎ Π·Π°Π΄ΡΠΌΠ°Π» ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, Π½Ρ Ρ ΠΊΠΎΡΠΎΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π²ΡΡ
ΠΎΠΆΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠΌΠΎΡΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ»ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠ΅Π½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ, Π»ΠΎΡΡΡΡ, Π²Π½ΡΡΡΠΈ Ρ ΠΌΠ΅Π½Ρ ΡΠ°ΠΌ ΠΌΠ°ΠΏΠΊΠ°, ΠΌΠ°ΠΏΠΊΠ° Π½Π΅ Π³Π°ΡΡΡΠΈΠ½ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ Π·Π°Π»ΠΎΡΠΈΡΡΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠΎ-ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, Π² defer ΡΡΠ°Π·Ρ unlock Π΄Π΅Π»Π°Ρ, Π½Ρ ΠΈ ΡΠ°ΠΌ ΡΠΌΠΎΡΡΡ Π΄Π°Π»ΡΡΠ΅. ΠΡΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ ΡΠΆΠ΅ ΡΠ°ΠΊΠ°Ρ ΠΌΠ΅ΡΡΠΈΠΊΠ° Π΅ΡΡΡ, Ρ ΡΠ°ΠΌ ΠΏΠ»ΡΡΡΡ Π²ΡΠ΅ΠΌΡ ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ, Ρ ΡΠΎΠ·Π΄Π°Ρ Π΅Π΅ Π² map. ΠΠΎΡ. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ, Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΠ»ΡΡΡΡ Π²ΡΠ΅ΠΌΡ. ΠΡΠΎ Π² trackContextTimings. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ Ρ ΡΡΡ Π΄Π΅Π»Π°Ρ, Π΅ΡΠ΅ ΡΠ°Π·. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π»ΡΠ±Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π·Π½Π°ΡΠΈΡ, Π²Π½ΡΡΡΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΌΠΎΠ³Ρ Π²ΡΠ·Π²Π°ΡΡ track ContextTimings, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ΄Π° ΡΡΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΈΠΌΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΡ Ρ Ρ
ΠΎΡΡ ΡΡΠΈΡΠ°ΡΡ, ΠΈ Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»Π°, ΠΈ ΠΎΠ½Π° Π·Π°ΡΡΠΈΡΠ°Π΅Ρ. ΠΡΠ»ΠΈ Ρ ΠΌΠ΅Π½Ρ ΡΠ°ΠΌ ΡΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π΅Ρ, Π΅ΡΠ»ΠΈ Π½Π΅Ρ ContextTiming, Π³Π΄Π΅-ΡΠΎ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, ΠΈΠ»ΠΈ Π΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ, Π½ΠΈΡΠ΅Π³ΠΎ ΡΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π½Π΅ ΡΠ»ΡΡΠΈΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ ΡΡΠ°Π·Ρ ΠΆΠ΅ Π²ΡΠΉΠ΄Ρ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΊΠΈΡ
Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠΎΡΠ΅ΠΌΡ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΡΠ΅ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠ°ΠΊ ΠΏΡΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΡ Ρ ΠΊΠΎΠΌΠΏΠ° time-ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ. ΠΡ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΊΠ°ΡΡΡ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΊ Π½ΡΠΆΠ½ΠΎΠΌΡ Π²Π°ΠΌ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
, ΠΈ Π½Π΅Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ±ΡΠ΅ΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠΎ Π΅ΡΡΡ Π΅ΡΠ»ΠΈ Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΡΡΡΡΠΊΡΡΡΠ° ΠΆΠ΅ΡΡΠΊΠ°Ρ, ΡΠ°ΠΌ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΌΡ ΡΡΠ΄Π° ΠΊΠ»Π°Π΄Π΅ΠΌ, ΡΡΠΎ ΡΠ°ΠΌ Π΄Π΅Π»Π°Π΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, Π° Ρ ContextValue Π½Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ. ΠΠ°, ΠΎΠ½ ΡΠ΅Π·ΠΈΠ½ΠΎΠ²ΡΠΉ, ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΎ, Π½ΠΎ Π²ΠΎΡ ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ api. ΠΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΌΠΈΠ½ΡΡ. Π’ΠΎ Π΅ΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΡΠ΄Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Ρ
ΡΠ°Π½ΠΈΡΡ ΡΠ°ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½Ρ Π²Π°ΠΌ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠΊΠ° ΠΆΠΈΠ·Π½ΠΈ Π²Π°ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. Π’ΠΎ Π΅ΡΡΡ instance-Π»ΠΎΠ³Π³Π΅ΡΠ° ΡΡΠ΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π½Π΅ Π½Π°Π΄ΠΎ, ΠΊΠΎΠ½Π½Π΅ΠΊΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
ΡΡΠ΄Π° ΡΠΎΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π½Π΅ Π½Π°Π΄ΠΎ. ΠΠΎΡ ΡΠ°ΠΉΠΌΠΈΠ½Π³ΠΈ β ΠΏΠΎΠ½ΡΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΡΠΈΡ ΠΈΠ»ΠΈ requestID ΠΈΠ»ΠΈ userID ΡΠ°ΠΌ ΡΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ
ΡΠ°Π½ΠΈΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π»ΡΠ·Ρ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΠΎ Π΅ΡΡΡ Π½Π΅Π»ΡΠ·Ρ Π΄Π΅Π»Π°ΡΡ Π²ΠΎΡ ΡΠ°ΠΊ: ctx : = ctx WithValue, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, post_id, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, 42. ΠΠΎΡ ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ Π½Π΅Π»ΡΠ·Ρ. Π ΠΏΠΎΡΠΎΠΌ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΈΠΏΠ° getPosts. ΠΠΎΡ ΡΠ°ΠΊ Π΄Π΅Π»Π°ΡΡ Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Π»ΡΠ·Ρ. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ
ΠΎΠΉ ΡΠΎΠ½. ΠΡΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π²Π°ΠΌ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ Π½Π΅Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ API, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² compile time ΠΈ ΡΡΠ΅Π²Π°ΡΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠΎΡΡΠΎΠΌΡ Π·Π°Π±ΡΠ΄ΡΡΠ΅, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΡΠ΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΠ±ΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²Π΄ΡΡΠ³ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π°Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΌ ctxlog, ΡΡΠΎΠ±Ρ request id Π΄ΠΎΡΡΠ°Π²Π°ΡΡ ctx, some thing happened. ΠΠΎΡ, ΡΠΎ Π΅ΡΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΠΉΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌ API. ΠΡΠ΅ ΡΠ°Π·: ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΠ±ΡΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π²Π°ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ Π½Π΅ΠΊΠΎΠ΅ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΠ°ΠΉΠΌΠΈΠ½Π³ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π² ΠΊΠΎΠ½ΡΠ΅ Π²ΡΠ²ΠΎΠΆΡ. ΠΠ°Π΄Π½ΠΎ. ΠΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π»ΠΈ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΡΠ°ΠΉΠΌΠΈΠ½Π³. Π’ΠΎ Π΅ΡΡΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π½Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π·Π°ΠΏΠ»ΡΡΠΎΠ²Π°Π»ΠΈ ΡΡΠ΄Π° ΠΈ Π²ΡΠ΅. Π’Π΅ΠΏΠ΅ΡΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Middleware. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ ΡΡΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π·Π°ΠΏΡΠΎΡ, ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Ρ ΡΠ°ΠΉΠΌΠΈΠ½Π³Π°ΠΌΠΈ, Π° Π΄Π°Π»ΡΡΠ΅ ΠΌΡ Π² defer Π΅Π³ΠΎ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ»ΠΎΠ³ΠΈΡΠΎΠ²Π°ΡΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΏΡΡΡ-ΡΠ°ΠΊΠΈ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΡΠΈ ΡΠ°ΠΉΠΌΠΈΠ½Π³ΠΈ. ΠΠΏΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ°ΠΌ Π΅ΡΡΡ ΠΈ ΠΎΠ½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΊΠ°ΡΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΊ ΡΠΎΠΌΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΠ΅ΠΌΡ Π½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΠΎΡΠ°, ΠΈ ΡΡΡ Ρ ΡΠΆΠ΅ Π½Π°ΡΠΈΠ½Π°Ρ ΠΈΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ°ΠΉΠΌΠΈΠ½Π³Π°ΠΌ. Π’ΡΡ Ρ ΠΏΠ»ΡΡΡΡ ΠΊ duration ΠΈ ΠΏΠΈΡΡ ΡΡΡΠΎΠΊΡ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ» Π·Π° ΡΠ°ΠΉΠΌΠΈΠ½Π³, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΡΠ»ΠΎ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π». Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠΎ Π·Π°Π½ΡΠ»ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΠ»ΠΎ ΡΡΡΠ΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΡΡΡΠ΅Π½ΠΎ. Π ΠΏΠΎΡΠΎΠΌ Π²ΡΠ²ΠΎΠΆΡ ΡΡΠΎ Π½Π° ΡΠΊΡΠ°Π½. Π― Π½Π΅ Π΄Π΅Π»Π°Ρ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· ΠΏΠ»ΡΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ ΡΡΡΠΎΠΊ, ΡΠΈΠΏΠ° ΡΠ°ΠΊ: log + =, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ, Ρ ΠΈ ΡΠ°ΠΊ Sprintfm ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ, Π° Ρ ΡΡΠ°Π·Ρ ΠΏΠΈΡΡ ΠΏΡΠΎΡΡΠΎ Π² Π±ΡΡΠ΅Ρ. ΠΡΠ°ΠΊ, Π΅ΡΠ΅ ΡΠ°Π·: Π²ΠΎΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠ½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΠΎΡΠ°. Π’ΠΎ, ΡΡΠΎ ΠΌΠ½Π΅ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠΎΡ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π’ΠΎ Π΅ΡΡΡ Ρ ΠΏΡΠΎΠΈΡΠ΅ΡΠΈΡΠΎΠ²Π°Π»ΡΡ main timing, Π²ΡΠ²Π΅Π» Π²ΡΠ΅, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ ΡΠ°ΠΌ Π±ΡΠ»ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Ρ Π²ΡΠ²Π΅Π» total, ΡΠΎ Π΅ΡΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡ ΡΠ°Π±ΠΎΡΠ°Π» Π²ΡΠ΅Π³ΠΎ. Π― Π²ΡΠ²Π΅Π» ΡΡΡΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΠΎ Π΅ΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΠΏΠΎΠΊΡΡΡΠΎ ΡΡΠΈΠΌΠΈ ΡΠ°ΠΉΠΌΠΈΠ½Π³Π°ΠΌΠΈ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΡΠΌΠΈ, ΠΈ Π²ΡΠ²Π΅Π» unknown. unknown β ΡΡΠΎ Π½Π΅ΡΡΡΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΈ Ρ Π½Π΅ Π·Π½Π°Ρ, Π½Π° ΡΡΠΎ ΠΎΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΡΡΠ°ΡΠ΅Π½ΠΎ. ΠΠΎΠΌΠ½ΠΈΡΠ΅, Π²ΠΎΡ Π·Π΄Π΅ΡΡ Π²ΠΎΡ Ρ Π΄Π΅Π»Π°Π» time.Sleep? ΠΠΎΡ ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· ΠΎΠ½ΠΎ, Π²ΠΎΡ ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· Π½Π΅ΡΡΡΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. ΠΠΎΡ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Context Value. ΠΡΠ΅ ΡΠ°Π· Ρ Π²Π°ΠΌ Π½Π°ΠΏΠΎΠΌΠ½Ρ: Context Value ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Ρ
ΡΠ°Π½ΠΈΡΡ Π² request scope ΡΡΠΎ-ΡΠΎ. Π’ΠΎ Π΅ΡΡΡ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΆΠΈΠ·Π½ΠΈ Π²Π°ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. Π Π½Π΅ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Ρ
ΡΠ°Π½ΠΈΡΡ ΡΠΎ, ΡΡΠΎ Π½Π΅ ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡΠΎΡ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π’ΠΎ Π΅ΡΡΡ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
ΡΠ°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ. Π’Π°ΠΊΠΆΠ΅ ΡΠ΅ΡΠ΅Π· Context Value Π½Π΅Π»ΡΠ·Ρ Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΡΠ΅ΠΌΡ? ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Context Value ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΠΏΡΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π·Π½Π°ΡΠΈΡ, ΠΎΠ½ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½Π΅Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ runtime api, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π² compile time. Π’ΠΎ Π΅ΡΡΡ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΠ΅ΡΠΊΠ°Ρ ΡΡΡΡΠΊΡΡΡΠ°, Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΡΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΡΠΎ, ΡΡΠ΄Π° ΡΠ΅, ΠΈ Π΅ΡΡΡ ΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. Π Ρ Context Value Π½Π΅Π»ΡΠ·Ρ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅ ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠΊΠ°ΠΌΠΈ. Π ΡΡΠΎΠΌ ΠΏΠ»Π°Π½Π΅ ΡΡΠΎ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Π²Π΅ΡΡ Π½ΡΠΆΠ½Π°Ρ, ΠΈ Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΡΠΌΠΎΠΌ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π²Π°ΠΌ Π² ΠΏΠΎΠΌΠΎΡΡ. ΠΡΠ»ΠΈ Π½Π΅Ρ, Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΅ ΠΏΠ»ΠΎΡ
ΠΎ. Context Value ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π³Π΄Π΅, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½Π°Π΄ΠΎ, ΠΎΠ½ Π΅ΡΡΡ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠΉ. ΠΡΠ»ΠΈ Π²Π΄ΡΡΠ³ Π²Π°ΠΌ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ Π±Π°Π·ΠΎΠ²ΡΡ
ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π²Ρ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ Ρ
ΠΎΡΠΈΡΠ΅ Ρ
ΡΠ°Π½ΠΈΡΡ ΡΠ°ΠΌ ΡΡΠΎ-ΡΠΎ ΠΎΠ±ΡΠ΅Π΅, Π»ΡΡΡΠ΅ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ. Π Ρ
ΡΠ°Π½ΠΈΡΠ΅ ΡΠ°ΠΌ Π½Π΅ ΡΠ΅ΡΠ΅Π· Value, ΠΊΠΎΡΠΎΡΡΠΉ runtime, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΡΠ΅Π· ΠΏΡΡΡΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, Π° ΠΊΠ°ΠΊ ΠΏΠΎΠ»Π΅ Π² ΡΡΡΡΠΊΡΡΡΠ΅. Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΡΠΆΠ΅ Π² ΠΊΠ°ΠΊΡΡ-ΡΠΎ Π³ΠΎΡΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΡΠ°Π·Π²Π΅ ΡΡΠΎ ΡΡΠΎ Π²Π°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π² ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Π΅Π³ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΠ΅ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ. Π’ΠΎ Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΎΠ½ Π½Π΅ ΡΠ°ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΠΎΠ½ Π²ΡΠ΅Π³Π΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΌ API. Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠΉ.