ΠŸΡ€ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘

Одной ΠΈΠ· приятных особСнностСй Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ управляСмых Ρ„ΠΎΡ€ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ (исполняСмом) ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΏΠΎΠ΄ Windows, Linux, MacOS X, Ρ‚Π°ΠΊ ΠΈ ΠΊΠ°ΠΊ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ 5 Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² – Chrome, Internet Explorer, Firefox, Safari, Edge, ΠΈ всС это – Π±Π΅Π· измСнСния исходного ΠΊΠΎΠ΄Π° прилоТСния. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ – внСшнС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΈ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈ выглядит практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ.
НайдитС 10 ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ (ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ 2 ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ):

Окно Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° Linux:

ΠŸΡ€ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘

Π’ΠΎ ΠΆΠ΅ ΠΎΠΊΠ½ΠΎ Π² Π²Π΅Π± ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Chrome):

ΠŸΡ€ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘

Π—Π°Ρ‡Π΅ΠΌ ΠΌΡ‹ сдСлали Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚? Говоря нСсколько пафосно, Ρ‚Π°ΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ поставило врСмя. Π£ΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ стала Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ условиСм для бизнСс-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ для нашСго Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ наши ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Ρ‹, кстати, Π½Π° этом ΠΈ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ; Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ ΠΎΡ‚ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°). ΠœΡ‹ ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π΄Π°Ρ‚ΡŒ нашим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ большС.

ΠŸΡ€ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ возмоТности Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‡Π΅Ρ€Π΅Π· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ для Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±Ρ‹Π»ΠΎ большим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ с ΠΏΠΎΠ»Π½ΠΎΠΉ смСной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрного взаимодСйствия. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΆΠ΅ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° β€” ΠΈ вовсС Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π°Ρ‡ΠΈΠ½Π°Π²ΡˆΠΈΠΉΡΡ с нуля.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π˜Ρ‚Π°ΠΊ, трСбования ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ: Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚ΠΎΠ½ΠΊΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ:

  1. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс
  2. Π˜ΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ клиСнтский ΠΊΠΎΠ΄, написанный Π½Π° языкС 1Π‘

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс Π² 1Π‘ описываСтся Π² Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, Π½ΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ, Π±Π΅Π· попиксСльной расстановки элСмСнтов; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΊΠΎΠ»ΠΎ Ρ‚Ρ€Π΅Ρ… дСсятков Ρ‚ΠΈΠΏΠΎΠ² элСмСнтов интСрфСйса β€” ΠΊΠ½ΠΎΠΏΠΊΠΈ, поля Π²Π²ΠΎΠ΄Π° (тСкстовыС, Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅, Π΄Π°Ρ‚Π°/врСмя), списки, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ Ρ‚.Π΄.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° языкС 1Π‘ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² сСбС сСрвСрныС Π²Ρ‹Π·ΠΎΠ²Ρ‹, Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ рСсурсами (Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ Ρ‚.ΠΏ.), ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

И Ρ‚ΠΎΠ½ΠΊΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ (ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ‡Π΅Ρ€Π΅Π· Π²Π΅Π±), ΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Π½Π°Π±ΠΎΡ€ΠΎΠΌ Π²Π΅Π±-сСрвисов для общСния с сСрвСром ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ 1Π‘. РСализация Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, разная – Ρ‚ΠΎΠ½ΠΊΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ написан Π½Π° Π‘++, Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – Π½Π° JavaScript.

НСмного истории

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ создания Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° стартовал Π² 2006 Π³ΠΎΠ΄Ρƒ, Π² Π½Π΅ΠΌ (Π² срСднСм) участвовала ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ· 5 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. На ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… этапах ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Π»ΠΈΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ спСцифичСской Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌ ΠΈ Ρ‚.Π΄.); ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, это Π±Ρ‹Π»ΠΈ Ρ‚Π΅ ΠΆΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π»ΠΈ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅. Π’.Π΅. Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π·Π°Π½ΠΎΠ²ΠΎ писали Π½Π° JavaScript ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, Ρ€Π°Π½Π΅Π΅ созданныС ΠΈΠΌΠΈ Π½Π° C++.

Π‘ самого Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ ΠΎΡ‚Π²Π΅Ρ€Π³Π»ΠΈ идСю ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ автоматичСской (хотя Π±Ρ‹ частичной) конвСрсии C++ ΠΊΠΎΠ΄Π° Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² JavaScript Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²Π²ΠΈΠ΄Ρƒ ΡΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ этих Π΄Π²ΡƒΡ… языков; Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ писался Π½Π° JavaScript с чистого листа.

Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… итСрациях ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π» клиСнтский ΠΊΠΎΠ΄ Π½Π° встроСнном языкС 1Π‘ нСпосрСдствСнно Π² JavaScript. Π’ΠΎΠ½ΠΊΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ поступаСт ΠΈΠ½Π°Ρ‡Π΅ β€” ΠΊΠΎΠ΄ Π½Π° встроСнном языкС 1Π‘ компилируСтся Π² Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΈ Π·Π°Ρ‚Π΅ΠΌ этот Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ интСрпрСтируСтся Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅. ВпослСдствии Ρ‚Π°ΠΊ ΠΆΠ΅ стал Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ – Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, это Π΄Π°Π»ΠΎ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ… – ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ².

ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²Ρ‹ΡˆΠ»Π° Π² 2009 Π³ΠΎΠ΄Ρƒ. Π’Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π° Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» 2 Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° – Internet Explorer ΠΈ Firefox. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ»Π°Π½Π°Ρ… Π±Ρ‹Π»Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Opera, Π½ΠΎ ΠΈΠ·-Π·Π° Π½Π΅ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΡ‹Ρ… Π½Π° Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ закрытия прилоТСния Π² Opera (Π½Π΅ ΡƒΠ΄Π°Π²Π°Π»ΠΎΡΡŒ со 100%-Π½ΠΎΠΉ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ закрываСтся, ΠΈ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ произвСсти ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΎΡ‚ сСрвСра ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ 1Π‘) ΠΎΡ‚ этих ΠΏΠ»Π°Π½ΠΎΠ² ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

ВсСго Π² ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ Π΅ΡΡ‚ΡŒ 4 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, написанных Π½Π° JavaScript:

  1. WebTools – ΠΎΠ±Ρ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ (сюда ΠΆΠ΅ ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Google Closure Library).
  2. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ управлСния Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΠ”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ (Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° JavaScript ΠΈ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, ΠΈ Π² Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅)
  3. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ управлСния ΠŸΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ (Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° JavaScript ΠΈ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, ΠΈ Π² Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅)
  4. Π’Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ структуру Java-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² (ΠΈΠ»ΠΈ .NET ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² – ΠΊΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π±Π»ΠΈΠΆΠ΅); Ρƒ нас Π΅ΡΡ‚ΡŒ нСймспСйсы, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ нСймспСйс Π»Π΅ΠΆΠΈΡ‚ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΠ°ΠΏΠΊΠΈ Π»Π΅ΠΆΠ°Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ классы нСймспСйса. Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠΊΠΎΠ»ΠΎ 1000 Ρ„Π°ΠΉΠ»ΠΎΠ².

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎ-ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΡƒ раздСляСтся Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ подсистСмы:

  • УправляСмый интСрфСйс клиСнтского прилоТСния
    • ΠžΠ±Ρ‰ΠΈΠΉ интСрфСйс прилоТСния (систСмныС мСню, ΠΏΠ°Π½Π΅Π»ΠΈ)
    • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ управляСмых Ρ„ΠΎΡ€ΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС, ΠΎΠΊΠΎΠ»ΠΎ 30 элСмСнтов управлСния (ΠΊΠ½ΠΎΠΏΠΊΠΈ, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° – тСкстовыС, Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅, Π΄Π°Ρ‚Π°/врСмя ΠΈ ΠΏΡ€., Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, списки, Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ Ρ‚.Π΄.)

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль, доступная Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (всСго Π±ΠΎΠ»Π΅Π΅ 400 Ρ‚ΠΈΠΏΠΎΠ²: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль управляСмого интСрфСйса, настройки ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, условного оформлСния ΠΈ ΠΏΡ€.)
  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ встроСнного языка 1Π‘
  • Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ² (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π² JavaScript)
    • Π Π°Π±ΠΎΡ‚Π° с ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠ΅ΠΉ
    • Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ
    • ВСхнология Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

РСализация всСго Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° JavaScript – Π΄Π΅Π»ΠΎ нСпростоС. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘ – ΠΎΠ΄Π½ΠΎ ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… client-side ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, написанных Π½Π° JavaScript – ΠΎΠΊΠΎΠ»ΠΎ 450.000 строк. ΠœΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² ΠΊΠΎΠ΄Π΅ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚Π°ΠΊΠΈΠΌ большим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ.

Для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° клиСнтского ΠΊΠΎΠ΄Π° ΠΌΡ‹ Π²Π½Π°Ρ‡Π°Π»Π΅ использовали свой собствСнный обфускатор, Π° начиная с вСрсии ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 8.3.6 (ΠΎΠΊΡ‚ΡΠ±Ρ€ΡŒ 2014) стали ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Google Closure Compiler. Π­Ρ„Ρ„Π΅ΠΊΡ‚ использования Π² Ρ†ΠΈΡ„Ρ€Π°Ρ… – Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° послС обфускации:

  • БобствСнный обфускатор – 1556 ΠΊΠ±
  • Google Closure Compiler – 1073 ΠΊΠ±

ИспользованиС Google Closure Compiler ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ быстродСйствиС Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° 30% ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с нашим собствСнным обфускатором. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π° 15-25% (Π² зависимости ΠΎΡ‚ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°) снизился объСм памяти, потрСбляСмой ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Google Closure Compiler ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, поэтому Π΅Π³ΠΎ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ для Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° максимально высокая. Closure Compiler Π΄Π΅Π»Π°Π΅Ρ‚ для нас нСсколько Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… Π²Π΅Ρ‰Π΅ΠΉ:

  • БтатичСская ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π½Π° этапС сборки ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (обСспСчиваСтся Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠ΄ аннотациями JSDoc). Π’ ΠΈΡ‚ΠΎΠ³Π΅ получаСтся статичСская типизация, ΠΎΡ‡Π΅Π½ΡŒ близкая ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ ΠΊ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ Π² Π‘++. Π­Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ достаточно большой ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ошибок Π½Π° стадии компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • УмСньшСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±Ρ„ΡƒΡΠΊΠ°Ρ†ΠΈΡŽ
  • Ряд ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ выполняСмого ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:
    • inline-подстановки Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² JavaScript – достаточно дорогая опСрация, ΠΈ inline-подстановки часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² сущСствСнно ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠΎΠ΄Π°.
    • ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ констант Π½Π° этапС компиляции. Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ константы, Π² Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ подставлСно фактичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ константы

Π’ качСствС срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ WebStorm.

Для Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ SonarQube, ΠΊΡƒΠ΄Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π°. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΡ‹ отслСТиваСм Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΡŽ качСства исходного ΠΊΠΎΠ΄Π° Π½Π° JavaScript ΠΈ стараСмся Π΅Π΅ Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ.

ΠŸΡ€ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘

КакиС Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°Π»ΠΈ/Ρ€Π΅ΡˆΠ°Π΅ΠΌ

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с рядом интСрСсных Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ.

ОбмСн Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с сСрвСром ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠΊΠ½Π°ΠΌΠΈ

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° обфускированиС исходного ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π΅ систСмы. Код, внСшний ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ исполняСмому ΠΊΠΎΠ΄Ρƒ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, вслСдствиС обфускации ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΡ‚ Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ наш исполняСмый ΠΊΠΎΠ΄ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚. Π’Π½Π΅ΡˆΠ½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ для нас являСтся:

  • Код, приходящий с сСрвСра Π² Π²ΠΈΠ΄Π΅ структур Π΄Π°Π½Π½Ρ‹Ρ…
  • Код Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° прилоТСния

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ обфускации ΠΏΡ€ΠΈ взаимодСйствии с сСрвСром ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ тэг @expose:

/**
 * @constructor
 * @extends {Base.SrvObject}
 */
Srv.Core.GenericException = function ()
{
    /**
     * @type {string}
     * @expose
     */
    this.descr;

    /**
     * @type {Srv.Core.GenericException}
     * @expose
     */
    this.inner;

    /**
     * @type {string}
     * @expose
     */
    this.clsid;

    /**
     * @type {boolean}
     * @expose
     */
    this.encoded;
}

А Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ обфускации ΠΏΡ€ΠΈ взаимодСйствии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ экспортируСмыС интСрфСйсы (интСрфСйсы, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ экспортируСмыми).

/**
 * ЭкспортируСмый интСрфСйс ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π° DropDownWindow
 *
 * @interface
 * @struct
 */
WebUI.IDropDownWindowExp = function(){}

/**
 * ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° 1 Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠ»ΠΈ Π½Π°Π·Π°Π΄
 *
 * @param {boolean} isForward
 * @param {boolean} checkOnly
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly){}

/**
 * ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Π΅Ρ†
 *
 * @param {boolean} isFirst
 * @param {boolean} checkOnly
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly){}

/**
 * @return {boolean}
 * @expose
 */
WebUI.IDropDownWindowExp.prototype.selectValue = function (){}

We used Virtual DOM before it became mainstream)

Как ΠΈ всС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ Π΄Π΅Π»ΠΎ со слоТным Π’Π΅Π± UI, ΠΌΡ‹ быстро поняли, Ρ‡Ρ‚ΠΎ DOM ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСским ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ интСрфСйсом. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ сразу Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π°Π½Π°Π»ΠΎΠ³ Virtual DOM для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с UI. Π’ процСссС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ события всС измСнСния DOM Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ Π² памяти ΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½Ρ‹Π΅ измСнСния ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΊ DOM-Π΄Π΅Ρ€Π΅Π²Ρƒ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°

Π§Ρ‚ΠΎΠ±Ρ‹ наш Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π» быстрСС, ΠΌΡ‹ ΠΏΠΎ максимуму стараСмся Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΡ‚Π°Ρ‚Π½Ρ‹Π΅ возмоТности Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (CSS ΠΈ Ρ‚.ΠΏ.). Π’Π°ΠΊ, командная панСль Ρ„ΠΎΡ€ΠΌΡ‹ (располоТСнная практичСски Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ прилоТСния) отрисовываСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ срСдствами Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, динамичСской вСрсткой Π½Π° Π±Π°Π·Π΅ CSS.

ΠŸΡ€ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘

ВСстированиС

Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования ΠΈ тСстирования ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ инструмСнт собствСнного производства (написанный Π½Π° Java ΠΈ C++), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π±ΠΎΡ€ тСстов, построСнных Π½Π° Π±Π°Π·Π΅ Selenium.

Наш инструмСнт унивСрсалСн – ΠΎΠ½ позволяСт Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ практичСски Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΊΠΎΠ½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для тСстирования ΠΊΠ°ΠΊ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ записываСт дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ²ΡˆΠ΅Π³ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Β«1Π‘Β», Π² Ρ„Π°ΠΉΠ»-сцСнарий. Π’ это ΠΆΠ΅ врСмя происходит запись ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ области экрана β€” эталонов. ΠŸΡ€ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ Π½ΠΎΠ²Ρ‹Ρ… вСрсий Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° сцСнарии ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π±Π΅Π· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ участия. Π’ случаях нСсовпадСния ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π° с эталонным Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ шагС тСст считаСтся ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΠ²ΡˆΠΈΠΌΡΡ, послС Ρ‡Π΅Π³ΠΎ спСциалист ΠΏΠΎ качСству ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ расслСдованиС – ошибка это ΠΈΠ»ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ повСдСния систСмы. Π’ случаС Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ повСдСния эталоны автоматичСски ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° Π½ΠΎΠ²Ρ‹Π΅.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ 25 миллисСкунд. Π’ рядС случаСв ΠΌΡ‹ Π·Π°ΠΊΠΎΠ»ΡŒΡ†ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ части сцСнария (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, нСсколько Ρ€Π°Π· повторяСм Π²Π²ΠΎΠ΄ Π·Π°ΠΊΠ°Π·Π°) для Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π΅Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ всСх Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π»ΠΎΠ³ для Π°Π½Π°Π»ΠΈΠ·Π°.

ΠŸΡ€ΠΎ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ 1Π‘
Наш инструмСнт тСстирования ΠΈ тСстируСмоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Наш инструмСнт ΠΈ Selenium Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли какая-Ρ‚ΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· экранов помСняла своС мСстополоТСниС – Selenium это ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ, Π½ΠΎ наш инструмСнт Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚, Ρ‚.ΠΊ. Π΄Π΅Π»Π°Π΅Ρ‚ попиксСльноС сравнСниС ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π° с эталоном. Π’Π°ΠΊΠΆΠ΅ инструмСнт Π² состоянии ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π²Π²ΠΎΠ΄Π° с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΌΡ‹ΡˆΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ… ΠΎΠ½ ΠΈ воспроизводит.

ВСсты Π½Π° ΠΎΠ±ΠΎΠΈΡ… инструмСнтах (нашСм ΠΈ Selenium) Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ сцСнарии Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ. ВСсты автоматичСски Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ послС Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ сборки ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Β«1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅Β». Π’ случаС замСдлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ сцСнариСв (ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ сборкой) ΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ расслСдованиС ΠΈ устраняСм ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ замСдлСния. ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ Ρƒ нас простой – новая сборка Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ.

Для расслСдования ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² замСдлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ инструмСнты; Π² основном ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Dynatrace AJAX Edition производства ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ DynaTrace. ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡΡ запись Π»ΠΎΠ³ΠΎΠ² выполнСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈ Π½Π° Π½ΠΎΠ²ΠΎΠΉ сборкС, Π·Π°Ρ‚Π΅ΠΌ Π»ΠΎΠ³ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ. ΠŸΡ€ΠΈ этом врСмя выполнСния Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (Π² миллисСкундах) ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ – Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ пСриодичСски Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ слуТСбныС процСссы Ρ‚ΠΈΠΏΠ° ΡƒΠ±ΠΎΡ€ΠΊΠΈ мусора, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒΡΡ Π½Π° врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. Π‘ΠΎΠ»Π΅Π΅ Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² этом случаС Π±ΡƒΠ΄Π΅Ρ‚ количСство Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… инструкций JavaScript, количСство Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ DOM ΠΈ Ρ‚.ΠΏ. Если количСство инструкций/ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ сцСнарии Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ»ΠΎΡΡŒ – это ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ быстродСйствия, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ.

Π’Π°ΠΊΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ падСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Google Closure Compiler ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅ смог ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ inline-подстановку Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ функция рСкурсивная ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ). Π’ этом случаС ΠΌΡ‹ стараСмся ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, пСрСписав исходный ΠΊΠΎΠ΄.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ²

Π’ случаС, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅Ρ‚ Π² JavaScript, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠ²:

Наши Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ состоят ΠΈΠ· Π΄Π²ΡƒΡ… частСй. ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ – Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ называСтся Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, написанныС Π½Π° JavaScript Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для Chrome ΠΈ Firefox), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ со Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ β€” Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌ Π½ΡƒΠΆΠ½ΡƒΡŽ Π½Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Надо ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ пишСм 3 вСрсии Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ – ΠΏΠΎΠ΄ Windows, Linux ΠΈ MacOS. Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ поставляСтся Π² составС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ 1Π‘:ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΈΡΡ‚ΠΈΠ΅ ΠΈ находится Π½Π° сСрвСрС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ 1Π‘. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ с Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΎΠ½ΠΎ загруТаСтся Π½Π° клиСнтский ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ устанавливаСтся Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Safari наши Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ NPAPI, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Internet Explorer β€” Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ ActiveX. Microsoft Edge ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, поэтому Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π² Π½Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ограничСниями.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

Одна ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏ Π·Π°Π΄Π°Ρ‡ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° – это дальнСйшСС Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ‚ΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, вся новая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ рСализуСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π² Ρ‚ΠΎΠ½ΠΊΠΎΠΌ, ΠΈ Π² Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅.

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ β€” Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ надСТности. НапримСр, ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ – дальнСйшСС Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² сторону асинхронной ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π§Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π° настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ построСна Π½Π° синхронной ΠΌΠΎΠ΄Π΅Π»ΠΈ взаимодСйствия с сСрвСром. Асинхронная модСль сСйчас становится Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ… (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°Ρ…) Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ, ΠΈ это заставляСт нас ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π±-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡƒΡ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Π½Ρ‹ синхронных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π½Π° асинхронныС (ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π°). ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ асинхронной ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ постСпСнной ΠΈΡ… Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

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