ΠΠ»Π΅ΠΊΠΎΡΠ΅Π½Π° JavaScript ΠΌΠ°ΡΠΈΠ½Π° Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π½Π° Facebook Hermes, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΡΠ°ΠΌΠΊΠ°ΡΠ° Π Π΅Π°Π³ΠΈΡΠ°ΠΉΡΠ΅ Native Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Android. Π₯Π΅ΡΠΌΠ΅Ρ ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° Π²Π³ΡΠ°Π΄Π΅Π½Π° Π² React Native, Π·Π°ΠΏΠΎΡΠ²Π°ΠΉΠΊΠΈ Ρ Π΄Π½Π΅ΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ 0.60.2. ΠΡΠΎΠ΅ΠΊΡΡΡ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π° ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π΄ΡΠ»Π³ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ JavaScript ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° ΡΠ΅ΡΡΡΡΠΈ. ΠΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½Π° Π² C++ ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° Π½Π° MIT.
Π‘ΡΠ΅Π΄ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Hermes ΠΈΠΌΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ V8, Π½Π°ΠΉ-ΠΎΡΠ½Π΅ΠΌΠ°ΡΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ Π΅ΡΠ°ΠΏΠΈ ΡΠ° Π΅ΡΠ°ΠΏΠΈΡΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΡ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅. Hermes ΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΡΠ΅Π·ΠΈ ΡΡΡΠΏΠΊΠΈ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π΄Π° Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΠ°Π²ΡΠ½ΠΈ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π±Π°ΠΉΡ ΠΊΠΎΠ΄.
ΠΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Ρ ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡΠ° Π·Π° Π±ΠΎΠΊΠ»ΡΠΊ SemiSpace, ΠΊΠΎΠΉΡΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Ρ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ (ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ²Π°Π½Π΅), ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ ΠΈ Π΄Π΅ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅, Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΠΊΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°, Π±Π΅Π· ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ»Π°ΡΠ° ΠΊΡΠΏΡΠΈΠ½Π°.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° JavaScript Π΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π΅ΡΠ°ΠΏΠ°. ΠΡΡΠ²ΠΎ, ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²Π΅ ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΈ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠ΄Π° (Π₯Π΅ΡΠΌΠ΅Ρ IR), Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ SSA (Π‘ΡΠ°ΡΠΈΡΠ½ΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅). Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π² ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΈΠ»Π°Π³Π° ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ Π·Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π°ΠΏΡΠ΅Π΄, Π·Π° Π΄Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ° ΠΏΡΡΠ²ΠΈΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π² ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΠ°Π·Π²Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. ΠΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π΅ΡΠ°ΠΏ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π±Π°ΠΉΡ ΠΊΠΎΠ΄ΡΡ Π·Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π°ΡΠ° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°.
Π Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ Ρ ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ°ΡΠ° Π½Π° ΡΠ°ΡΡ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ° ECMAScript 2015 JavaScript (ΠΊΡΠ°ΠΉΠ½Π°ΡΠ° ΡΠ΅Π» Π΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ) ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ React Native ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Hermes ΡΠ΅ΡΠΈ Π΄Π° Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° eval(), Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ, ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (Reflect ΠΈ Proxy), Intl API ΠΈ Π½ΡΠΊΠΎΠΈ ΡΠ»Π°Π³ΠΎΠ²Π΅ Π² RegExp. ΠΠ° Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Hermes Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ React Native, ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΠΎΠΏΡΠΈΡΡΠ° βenableHermes: trueβ ΠΊΡΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ°Π΄ΠΈ Hermes Π² CLI ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ JavaScript ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. ΠΠ°Π»ΠΈΡΠ΅Π½ Π΅ ΡΠ΅ΠΆΠΈΠΌ Π½Π° ΠΌΡΡΠ·Π΅Π»ΠΈΠ²Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ JavaScript Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π° Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, Π²Π΅ΡΠ΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ.
Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Facebook Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΠ° Π΄Π° Π°Π΄Π°ΠΏΡΠΈΡΠ° Hermes Π·Π° Node.js ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ° ΡΠ°ΠΌΠΎ Π²ΡΡΡ
Ρ ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (AOT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° Π²ΠΌΠ΅ΡΡΠΎ JIT Π΅ Π½Π°ΠΉ-ΠΎΠΏΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° RAM ΠΈ ΠΏΠΎ-Π±Π°Π²Π½Π° Flash). ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΎ ΠΎΡ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ Π½Π° Microsoft ΡΠ°Π·ΠΊΡΠΈΡΠ΅ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Hermes ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Microsoft Office Π·Π° Android ΡΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π·Π° 1.1 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ. ΡΠ»Π΅Π΄ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ° 21.5MB RAM, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° V8 Π΄Π²ΠΈΠ³Π°ΡΠ΅Π» ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΎΡΠ½Π΅ΠΌΠ° 1.4 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π΅ 30MB.
ΠΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅: Facebook ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Hermes Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ MatterMost, Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° (TTI, Time To Interact) Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΎΡ 4.30 Π½Π° 2.01 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° APK ΠΏΠ°ΠΊΠ΅ΡΠ° Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½ ΠΎΡ 41 Π½Π° 22 MB, Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΎΡ 185 Π½Π° 136 MB.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru