Фејсбук со отворен извор Хермес JavaScript мотор

Лесен JavaScript мотор со отворен извор на Фејсбук Хермес, оптимизиран за извршување на апликации врз основа на рамката Реагирајте на мајчин на Android платформата. Хермес поддршка вграден во React Native почнувајќи со денешното издание на 0.60.2. Проектот е дизајниран да ги реши проблемите со долгото време на стартување за мајчин JavaScript апликации и значителна потрошувачка на ресурси. Код Напишано од во C++ и дистрибуирани под лиценцата MIT.

Меѓу предностите на користењето на Hermes, има намалување на времето за стартување на апликацијата, намалување на потрошувачката на меморија и намалување на големината на апликацијата. Кога се користи V8, фазите кои најмногу одземаат многу време се фазите на парсирање на изворниот код и негово компајлирање во лет. Хермес ги носи овие чекори во фаза на изградба и дозволува апликациите да се испорачуваат во форма на компактен и ефикасен бајтекод.

За директно извршување на апликацијата, се користи виртуелна машина развиена во рамките на проектот со собирачот на ѓубре SemiSpace, кој дистрибуира блокови само по потреба (On-demand), поддржува преместување и дефрагментација на блокови, враќање на ослободената меморија во оперативниот систем, без периодично скенирање на содржината на целиот куп.

Обработката на JavaScript е поделена на неколку фази. Прво, изворните текстови се анализираат и се генерира средно претставување на кодот (Хермес ИР), врз основа на застапеноста ССА (Статичка единечна задача). Следно, средното претставување се обработува во оптимизатор, кој применува напредни статички техники за оптимизација за да го трансформира примарниот среден код во поефикасна средна репрезентација додека ја зачувува оригиналната семантика на програмата. Во последната фаза се генерира бајтекодот за регистрираната виртуелна машина.

Во моторот поддржано од дел од стандардот JavaScript ECMAScript 2015 (крајната цел е целосно да се поддржи) и обезбедува компатибилност со повеќето постоечки React Native апликации. Хермес одлучи да не поддржува локално извршување на eval(), со изјави, рефлексија (Reflect и Proxy), Intl API и некои знаменца во RegExp. За да го овозможите Hermes во апликацијата React Native, само додадете ја опцијата „enableHermes: true“ во проектот. Исто така, можно е да се изгради Hermes во CLI режим, што ќе ви овозможи да извршите произволни датотеки JavaScript од командната линија. Мрзливиот режим на компилација е достапен за дебагирање, кој ви овозможува да не компајлирате JavaScript секој пат за време на процесот на развој, туку да генерирате бајтекод во лет веќе на уредот.

Во исто време, Facebook не планира да го адаптира Hermes за Node.js и други решенија, фокусирајќи се само на мобилните апликации (компилацијата AOT наместо JIT е најоптимална во контекст на мобилните системи, кои имаат ограничена RAM меморија и побавен Flash). Прелиминарно тестирање на перформансите спроведено од вработени на Мајкрософт откриенодека при користење на Hermes, апликацијата Microsoft Office за Android станува достапна за употреба за 1.1 секунда. по стартувањето и троши 21.5 MB RAM, додека при користење на V8 моторот потребни се 1.4 секунди за стартување и потрошувачката на меморија е 30 MB.

Дополнување: Фејсбук објавена сопствени резултати од тестот. При користење на Hermes со апликацијата MatterMost, времето за започнување на достапноста за работа (TTI, Time To Interact) се намали од 4.30 на 2.01 секунди, големината на пакетот APK беше намалена од 41 на 22 MB, а потрошувачката на меморија од 185 на 136 МБ.

Извор: opennet.ru

Додадете коментар