Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π°ΠΊΡΠΈΠΈ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ°ΠΉΡΠ°. ΠΡΠ»ΠΈ Π²Ρ Π²Π»Π°Π΄Π΅Π΅ΡΠ΅ Π΄ΠΎΡΠΊΠΎΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ-ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠΌ, ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ input Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΆΠ΅ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡ Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ. ΠΡΠ΄ΠΈ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ ΠΊ ΠΌΠΎΡΠ½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ ΠΊΡΡΠΏΠ½Π΅ΠΉΡΠΈΠ΅ ΠΌΠ°ΡΠΊΠ΅ΡΠΏΠ»Π΅ΠΉΡΡ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ ΡΠΎΠΉ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΠΠ²ΠΈΡΠΎ, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ Π΄Π»Ρ ΡΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΠΈ.
ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠ΅Ρ ΠΏΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΡΠ»ΠΎΠ², ΠΎΠ½ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ Π½Π° Π²Π²ΠΎΠ΄ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡ ΡΠ·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΡΡ HTML-ΡΠ°Π·ΠΌΠ΅ΡΠΊΡ, ΡΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ CSS ΠΈ Π»ΠΎΠ³ΠΈΠΊΡ JavaScript, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΠΈΡΠΊΠ°.
Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π·Π° Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΡΡΠΎΡΠΎΠΉ ΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ DOM-Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠΈΡ: ΡΠ΄ΠΎΠ±Π½Π°Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π½Π° ΡΠ°ΠΉΡΠ΅. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΎΡ ΡΠ΅ΠΎΡΠΈΠΈ ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΈ Π½Π°ΡΠ½Π΅ΠΌ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
ΠΠ°Π·ΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° HTML ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° ΠΏΠΎΠ»Π΅ΠΉ
Π€ΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠΎΠΌ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π°Ρ Π²Π΅ΡΡΡΠΊΠ°. Π€ΠΎΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° Π½Π° ΠΠ²ΠΈΡΠΎ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΊΠ»ΡΡΠ΅Π²ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²: ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ Π΄Π»Ρ Π²Π²ΠΎΠ΄Π° Π·Π°ΠΏΡΠΎΡΠ°, ΠΊΠ½ΠΎΠΏΠΊΠΈ-ΡΡΠΈΠ³Π³Π΅ΡΠ° ΠΈ, ΡΠ°ΡΡΠΎ, Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅Π³ΠΎΠ² form, input ΠΈ
ΠΠ°ΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π°Π²ΡΠΎΠ·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΡΠΈΠ±ΡΡ autocomplete Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΌΠ΅ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° placeholder, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π΄Π°Π΅Ρ ΡΠΎΠ½ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠ΅Π³ div Π΄Π»Ρ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π°. ΠΡΠΎ Π½Π°ΡΡΡΠ°Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΠΎΡΠΌΡ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ
ΡΠΎΠ±ΠΎΡΠΎΠ².
ΠΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΈΡΡΡΠΌ ΠΈ Π»ΠΈΡΠ΅Π½Π½ΡΠΌ Π»ΠΈΡΠ½Π΅ΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ. ΠΠ»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ Π±Π»ΠΎΠΊΠΎΠ² Π²Π½ΡΡΡΠΈ ΡΠΎΡΠΌΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ-ΠΎΠ±Π΅ΡΡΠΊΠΈ, Π½ΠΎ Π±Π΅Π· Π½Π°ΡΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. ΠΡΠΎ ΡΠΏΡΠΎΡΡΠΈΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ CSS.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°ΡΡΠΈΠ±ΡΡ aria-label Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΎΠΊ ΠΏΠΎΠΈΡΠΊΠ°, ΡΡΠΎΠ±Ρ ΡΠΊΡΠΈΠ½ΡΠΈΠ΄Π΅ΡΡ ΠΌΠΎΠ³Π»ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΠ·Π²ΡΡΠΈΠ²Π°ΡΡ ΠΈΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠ»Π°Π±ΠΎΠ²ΠΈΠ΄ΡΡΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ.
Π‘ΡΠΈΠ»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΠΎΡΡΡ
ΠΠΈΠ·ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ°Ρ ΠΈΠ³ΡΠ°Π΅Ρ Π½Π΅ ΠΌΠ΅Π½ΡΡΡΡ ΡΠΎΠ»Ρ, ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ. Π€ΠΎΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΠΎΠΉ, Π½ΠΎ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅Π½Ρ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΊΡΡΠ³Π»Π΅Π½Π½ΡΠ΅ ΡΠ³Π»Ρ, Π»Π΅Π³ΠΊΡΡ ΡΠ΅Π½Ρ Π΄Π»Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π½Π°Π΄ ΡΠΎΠ½ΠΎΠΌ ΠΈ ΡΠ΅ΡΠΊΠΈΠ΅ Π³ΡΠ°Π½ΠΈΡΡ. ΠΡΠΈ Π½Π°Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° Π³ΡΠ°Π½ΠΈΡΡ ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½ΡΡΡ ΡΠ²Π΅Ρ ΠΈΠ»ΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΡΡΠ΅, ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΡ ΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΊ Π²Π²ΠΎΠ΄Ρ.
ΠΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΄Π΅Π»ΠΈΡΡ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ. ΠΠ° ΡΠΊΡΠ°Π½Π°Ρ ΡΠΌΠ°ΡΡΡΠΎΠ½ΠΎΠ² ΡΠΎΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° ΡΠ°ΡΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΡ ΡΠΈΡΠΈΠ½Ρ viewport ΠΈΠ»ΠΈ ΠΏΡΡΡΠ΅ΡΡΡ Π² "Π±ΡΡΠ³Π΅Ρ". ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ flexbox ΠΈΠ»ΠΈ grid ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅ΡΠ΅ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ: Π½Π° Π΄Π΅ΡΠΊΡΠΎΠΏΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΏΠΎΠΈΡΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠΏΡΠ°Π²Π° ΠΎΡ ΠΏΠΎΠ»Ρ Π²Π²ΠΎΠ΄Π°, Π° Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ»ΠΈ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½Π° Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡ.
ΠΠ½ΠΈΠΌΠ°ΡΠΈΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠΉ. Π Π΅Π·ΠΊΠΎΠ΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅Π³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π·Π΄ΡΠ°ΠΆΠ°ΡΡ. ΠΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ transition Π΄Π»Ρ ΡΠ²ΠΎΠΉΡΡΠ² opacity ΠΈ transform. ΠΡΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΡΡΠ΅Π½ΠΈΠ΅ "ΠΆΠΈΠ²ΠΎΠ³ΠΎ" ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠΊΠ»ΠΈΠΊΠ°Π΅ΡΡΡ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΡΠ³ΠΊΠΎ ΠΈ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎ.
ΠΠΎΠ³ΠΈΠΊΠ° JavaScript: ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π²ΠΎΠ΄Π° ΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ
ΠΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ HTML-ΡΠΎΡΠΌΡ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠ°. ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° β ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠ΅ input, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»Ρ. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ "Π·Π°Π²Π°Π»ΠΈΡΡ" ΡΠ΅ΡΠ²Π΅Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ»Π°Π²ΠΈΡΠΈ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ debounce (Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ).
Debounce ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 300-500 ΠΌΡ). ΠΡΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° Π±ΡΠΊΠ΅Π½Π΄ ΠΈ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΡΡΠ°ΡΠΈΠΊ. ΠΠ΅Π· ΡΡΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΠΌΠ° ΠΏΠΎΠΈΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΈ Π΄Π΅ΡΠ³Π°Π½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ ΠΏΠ»ΠΎΡ ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ.
Π’Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠΊΡΡ ΠΈ ΠΏΠΎΡΠ΅ΡΡ ΡΠΎΠΊΡΡΠ° (focus ΠΈ blur). ΠΡΠΈ ΠΏΠΎΡΠ΅ΡΠ΅ ΡΠΎΠΊΡΡΠ° Π²ΡΠΏΠ°Π΄Π°ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΡΡΠ²Π°ΡΡΡΡ, Π½ΠΎ Π½Π΅ ΡΡΠ°Π·Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠΏΠ΅Π» ΠΊΠ»ΠΈΠΊΠ½ΡΡΡ ΠΏΠΎ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΎΡΠ²Π΅ΡΠ°. ΠΠΎΠ³ΠΈΠΊΠ° Π·Π΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²ΡΡΡΡΠΎΠ΅Π½Π° Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΡΠΎΠ±ΡΡΠΈΠΉ.
βοΈ Π§Π΅ΠΊ-Π»ΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ JS
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ AJAX-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
Π‘Π΅ΡΠ΄ΡΠ΅ΠΌ ΡΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ
. ΠΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ½ΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΊ API. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ JavaScript ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Fetch API ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Axios. ΠΠ°ΠΏΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π»Π΅Π³ΠΊΠΈΠΌ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠΉ JSON-ΠΌΠ°ΡΡΠΈΠ² Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ².
Π‘ΡΡΡΠΊΡΡΡΠ° ΠΎΡΠ²Π΅ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΠΉ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ, ΡΠ΅Π½Ρ, ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΈ URL ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. JavaScript ΠΏΠ°ΡΡΠΈΡ ΡΡΠΎΡ ΠΎΡΠ²Π΅Ρ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ HTML-ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ, Π²ΡΡΠ°Π²Π»ΡΡ Π΅Π³ΠΎ Π² DOM.
async function getSearchSuggestions(query) {
try {
const response = await fetch('/api/search?s=' + encodeURIComponent(query));
const data = await response.json();
renderSuggestions(data);
} catch (error) {
console.error('ΠΡΠΈΠ±ΠΊΠ° ΠΏΠΎΠΈΡΠΊΠ°:', error);
}
}
ΠΠ°ΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ. ΠΠΎΠΊΠ° Π΄Π°Π½Π½ΡΠ΅ Π»Π΅ΡΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΈΠ΄Π΅ΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡ (ΡΠΏΠΈΠ½Π½Π΅Ρ), ΠΈΠ½Π°ΡΠ΅ ΠΎΠ½ ΠΏΠΎΠ΄ΡΠΌΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΉΡ Π·Π°Π²ΠΈΡ. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ°ΠΊΠΆΠ΅ ΠΊΡΠΈΡΠΈΡΠ½Π°: Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΠΎΡΠ²Π΅ΡΠΈΠ», Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠΎΠΎΠ±ΡΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ, Π½Π΅ Π»ΠΎΠΌΠ°Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠΎΡΠ΅ΠΌΡ JSON Π»ΡΡΡΠ΅ XML Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°?
JSON ΠΏΠ°ΡΡΠΈΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΌ Π΄Π²ΠΈΠΆΠΊΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅Π½ΡΡΠΈΠΉ Π²Π΅Ρ ΠΈ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π² ΡΠ°Π±ΠΎΡΠ΅ Ρ JavaScript ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π΄Π»Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ.
Π’Π°Π±Π»ΠΈΡΠ° ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°
ΠΡΠΈ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π½Π° ΡΠ°ΠΉΡΠ΅ Π²Π°ΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΉ: ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· SQL ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π²ΠΈΠΆΠΊΠΎΠ² Π²ΡΠΎΠ΄Π΅ Elasticsearch. ΠΡΠ±ΠΎΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ ΡΠΊΠΎΡΠΎΡΡΠΈ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ Π΄ΠΎΡΠΎΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±Π°. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ.
| ΠΠ΅ΡΠΎΠ΄ | Π‘ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ | ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π½Π° ΡΠ΅ΡΠ²Π΅Ρ | Π‘Π»ΠΎΠΆΠ½ΠΎΡΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ |
|---|---|---|---|
| SQL LIKE | ΠΠΈΠ·ΠΊΠ°Ρ | ΠΡΡΠΎΠΊΠ°Ρ | ΠΠΈΠ·ΠΊΠ°Ρ |
| Full-Text Search (MySQL) | Π‘ΡΠ΅Π΄Π½ΡΡ | Π‘ΡΠ΅Π΄Π½ΡΡ | Π‘ΡΠ΅Π΄Π½ΡΡ |
| Elasticsearch / Sphinx | ΠΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠ°Ρ | ΠΠΈΠ·ΠΊΠ°Ρ (ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ) | ΠΡΡΠΎΠΊΠ°Ρ |
| Algolia (SaaS) | ΠΠ³Π½ΠΎΠ²Π΅Π½Π½Π°Ρ | ΠΡΡΡΡΡΡΠ²ΡΠ΅Ρ (ΠΎΠ±Π»Π°ΠΊΠΎ) | ΠΠΈΠ·ΠΊΠ°Ρ |
ΠΠ»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² (Π΄ΠΎ 10-20 ΡΡΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ) Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ² Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΠΏΠΎΠΈΡΠΊΠΎΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π΄ΠΎ ΡΡΠΎΠ²Π½Ρ ΡΠ΅Π³ΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ, Π±Π΅Π· Elasticsearch ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² Π½Π΅ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΌΠΎΡΡΠΎΠ»ΠΎΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°, ΠΎΠΏΠ΅ΡΠ°ΡΠΊΠΈ ΠΈ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΡ.
Π£ΠΌΠ½ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌΠΈ
ΠΠ»Π°Π²Π½Π°Ρ ΡΠΈΡΠΊΠ° ΠΏΠΎΠΈΡΠΊΠ° "ΠΊΠ°ΠΊ Π½Π° ΠΠ²ΠΈΡΠΎ" β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΡΠ΅ΠΊΡΡΡ, Π° ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ intent (Π½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΡ) ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠ»ΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΠΈΡΠ΅Ρ "Π°ΠΉΡ", ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ "iPhone", "Apple", "Π‘ΠΌΠ°ΡΡΡΠΎΠ½Ρ". Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ Π»ΠΈΠ±ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° Π±ΡΠΊΠ΅Π½Π΄Π΅, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΉ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Ρ. Π Π²Π΅ΡΡ Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠΏΠΈΡΠΊΠ° ΠΌΠΎΠ³ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ, Π° Π½ΠΈΠΆΠ΅ β ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Ρ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΠ°ΠΌΠΈ. ΠΡΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ. Π’ΡΠΆΠ΅Π»ΡΠ΅ ΠΏΡΠ΅Π²ΡΡ Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ Π»Π°Π³ΠΈ ΠΏΡΠΈ ΠΏΡΠΎΠΊΡΡΡΠΊΠ΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ .
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π² Π²ΡΠΏΠ°Π΄Π°ΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΡΠΊΠΈ. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π³ΡΡΠΏΠΏ ("ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ", "ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ") Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠ°ΠΌΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΏΠΎΠΈΡΠΊΠ°. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΡΡΡΠ΅Π΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π³Π»Π°Π·Π°ΠΌΠΈ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ Π½ΡΠΆΠ½ΠΎΠ΅.
Π£ΠΌΠ½ΡΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡ Π² ΠΊΠ»ΠΈΠΊ Π΄ΠΎ 30%, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°Π·Ρ Π²ΠΈΠ΄ΠΈΡ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΡΠΉ ΡΠΎΠ²Π°Ρ, Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄Ρ ΡΠ΅ΡΠ΅Π· ΡΡΡΠ°Π½ΠΈΡΡ Π²ΡΠ΄Π°ΡΠΈ.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ Π·Π°ΡΠΈΡΠ° ΠΎΡ XSS-Π°ΡΠ°ΠΊ
Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ β ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° ΡΠΈΡΠΊ. ΠΠΎΠ»Π΅ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ ΠΌΠΈΡΠ΅Π½Π΅ΠΉ Π΄Π»Ρ XSS-Π°ΡΠ°ΠΊ (Cross-Site Scripting). ΠΠ»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²Π½Π΅Π΄ΡΠΈΡΡ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΡΠΉ JavaScript-ΠΊΠΎΠ΄ ΡΠ΅ΡΠ΅Π· ΡΡΡΠΎΠΊΡ ΠΏΠΎΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΎΠ³ΠΎ, Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡΠΈΠ΅ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π²ΡΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ Π² DOM, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΊΡΠ°Π½ΠΈΡΠΎΠ²Π°Π½Ρ. Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ
(React, Vue) ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, Π½ΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΈΡΡΠΎΠ³ΠΎ JavaScript ΠΈΠ»ΠΈ jQuery Π½ΡΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ. ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ innerHTML Π΄Π»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ textContent ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ΅ΡΠ΅Π· document.createElement ΠΈ appendChild. ΠΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π±ΡΠ°ΡΠ·Π΅Ρ Π²ΠΎΡΠΏΡΠΈΠΌΠ΅Ρ Π²Π²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡ, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ Content-Security-Policy.
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΠ½ΡΠ΅ΡΠΎΠ² ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²ΡΡΠ²ΠΈΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π΄ΡΡΡ Π² Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π½Π° ΡΠ°Π½Π½Π΅ΠΌ ΡΡΠ°ΠΏΠ΅. ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΡΠΎΡΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° β ΡΡΠΎ Π½Π΅ ΠΎΠΏΡΠΈΡ, Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡΠΆΠ΅Π½ Π»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ°?
ΠΠ°, Π΄Π»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½. ΠΡΠ°ΡΠ·Π΅Ρ Π½Π΅ Π·Π½Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎΠ²Π°ΡΡ Π΅ΡΡΡ Π² Π±Π°Π·Π΅, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡΠΏΡΠ°Π²ΠΈΡ Π·Π°ΠΏΡΠΎΡ. ΠΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΠ°ΡΡΡ (JS) Π»ΠΈΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π²Π΅ΡΠ½ΡΠ» ΡΠ΅ΡΠ²Π΅Ρ.
ΠΠ°ΠΊ ΡΠ°ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ?
Π§Π°ΡΡΠΎΡΠ° Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠ»Ρ Π΄ΠΎΡΠΎΠΊ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠ»ΠΈ Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π² 1-5 ΠΌΠΈΠ½ΡΡ, ΡΡΠΎΠ±Ρ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ²Π»ΡΠ»ΠΈΡΡ Π² ΠΏΠΎΠΈΡΠΊΠ΅.
ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠΈΡΠΊ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΡΡΠ°Π½ΠΈΡΡ?
ΠΠ΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ AJAX (Fetch API) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ Π±Π΅Π· ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π²ΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π±ΡΡΡΡΡΠΌ ΠΈ ΠΎΡΠ·ΡΠ²ΡΠΈΠ²ΡΠΌ.
ΠΠ°ΠΊΠΎΠΉ Π»ΠΈΠΌΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΡΡΠ°Π²ΠΈΡΡ Π² ΠΏΠΎΠ»Π΅ ΠΏΠΎΠΈΡΠΊΠ°?
ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈΠΌΠΈΡ Π² 100-150 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°, Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΈΠ½ΡΠ΅ΠΊΡΠΈΠΎΠ½Π½ΡΡ Π°ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠ°.