Motorul JavaScript Hermes cu sursă deschisă Facebook

Motor JavaScript ușor cu sursă deschisă Facebook Hermes, optimizat pentru rularea aplicațiilor bazate pe framework Răspunde Nativ pe platforma Android. Suport Hermes incorporat în React Native începând cu versiunea 0.60.2 de astăzi. Proiectul este conceput pentru a rezolva problemele cu timpi lungi de pornire pentru aplicațiile native JavaScript și consum semnificativ de resurse. Cod scris de în C++ și distribuit sub licența MIT.

Printre avantajele utilizării Hermes se numără o reducere a timpului de pornire a aplicației, o scădere a consumului de memorie și o reducere a dimensiunii aplicației. Când utilizați V8, etapele cele mai consumatoare de timp sunt etapele de analiză a codului sursă și compilare din mers. Hermes aduce acești pași în etapa de construire și permite ca aplicațiile să fie livrate sub formă de bytecode compact și eficient.

Pentru executarea directă a aplicației, se folosește o mașină virtuală dezvoltată în cadrul proiectului cu colectorul de gunoi SemiSpace, care distribuie blocurile doar după necesități (On-demand), suportă mutarea și defragmentarea blocurilor, returnând memoria eliberată sistemului de operare, fără periodic scanând conținutul întregului heap.

Procesarea JavaScript este împărțită în mai multe etape. Mai întâi, textele sursă sunt analizate și este generată o reprezentare intermediară a codului (Hermes IR), pe baza reprezentării S.S.A. (Atribuire unică statică). Apoi, reprezentarea intermediară este procesată într-un optimizator, care aplică tehnici de optimizare statică înainte pentru a transforma codul intermediar primar într-o reprezentare intermediară mai eficientă, păstrând în același timp semantica originală a programului. În ultima etapă, este generat bytecode-ul pentru mașina virtuală înregistrată.

În motor susținută de parte a standardului JavaScript ECMAScript 2015 (scopul final este acela de a-l susține pe deplin) și oferă compatibilitate cu majoritatea aplicațiilor React Native existente. Hermes a decis să nu accepte execuția locală a eval(), cu instrucțiuni, reflectare (Reflect și Proxy), API-ul Intl și unele steaguri în RegExp. Pentru a activa Hermes într-o aplicație React Native, trebuie doar să adăugați opțiunea „enableHermes: true” la proiect. De asemenea, este posibil să construiți Hermes în modul CLI, permițându-vă să executați fișiere JavaScript arbitrare din linia de comandă. Un mod de compilare leneș este disponibil pentru depanare, care vă permite să nu compilați JavaScript de fiecare dată în timpul procesului de dezvoltare, ci să generați bytecode din mers deja pe dispozitiv.

În același timp, Facebook nu intenționează să adapteze Hermes pentru Node.js și alte soluții, concentrându-se doar pe aplicațiile mobile (compilarea AOT în loc de JIT este cea mai optimă în contextul sistemelor mobile, care au RAM limitată și Flash mai lent). Testarea preliminară a performanței efectuată de angajații Microsoft a relevatcă atunci când utilizați Hermes, aplicația Microsoft Office pentru Android devine disponibilă pentru utilizare în 1.1 secunde. după pornire și consumă 21.5MB de RAM, în timp ce la utilizarea motorului V8 durează 1.4 secunde pentru a porni, iar consumul de memorie este de 30MB.

Adăugare: Facebook a publicat propriile rezultate ale testelor. Când utilizați Hermes cu aplicația MatterMost, timpul de începere a disponibilității pentru lucru (TTI, Time To Interact) a scăzut de la 4.30 la 2.01 secunde, dimensiunea pachetului APK a fost redusă de la 41 la 22 MB, iar consumul de memorie de la 185 la 136 MB.

Sursa: opennet.ru

Adauga un comentariu