Ֆեյսբուքի բաց կոդով Hermes JavaScript շարժիչը

Ֆեյսբուքի բաց կոդով, թեթև JavaScript շարժիչ Hermes, օպտիմիզացված շրջանակի վրա հիմնված հավելվածների գործարկման համար Վերադարձեք հայրենիքը Android հարթակի վրա: Hermes աջակցություն ներկառուցված React Native-ում՝ սկսած այսօրվա 0.60.2 թողարկումից: Նախագիծը նախատեսված է լուծելու JavaScript հավելվածների երկար գործարկման ժամանակի և ռեսուրսների զգալի սպառման հետ կապված խնդիրները: Կոդ գրված C++-ով և տարածվել MIT լիցենզիայի ներքո:

Hermes-ի օգտագործման առավելությունների թվում կա հավելվածի գործարկման ժամանակի կրճատում, հիշողության սպառման նվազում և հավելվածի չափի նվազում: V8-ի օգտագործման ժամանակ ամենաշատ ժամանակատար փուլերն են սկզբնական կոդը վերլուծելու և այն անմիջապես հավաքելու փուլերը: Hermes-ը բերում է այս քայլերը կառուցման փուլ և թույլ է տալիս հավելվածները մատուցել կոմպակտ և արդյունավետ բայթկոդի տեսքով:

Հավելվածն ուղղակիորեն գործարկելու համար SemiSpace աղբահանիչի հետ օգտագործվում է նախագծի շրջանակներում մշակված վիրտուալ մեքենա, որը բաշխում է բլոկները միայն ըստ անհրաժեշտության (ըստ պահանջի), աջակցում է բլոկների տեղափոխմանը և դեֆրագրմանը, ազատված հիշողությունը օպերացիոն համակարգին վերադարձնելով՝ առանց պարբերաբար։ սկանավորելով ամբողջ կույտի բովանդակությունը:

JavaScript-ի մշակումը բաժանված է մի քանի փուլերի. Նախ, սկզբնական տեքստերը վերլուծվում են և ստեղծվում է կոդի միջանկյալ ներկայացում (Hermes IR), ներկայացվածության հիման վրա SSA- ն (Static Single Assignment): Այնուհետև միջանկյալ ներկայացումը մշակվում է օպտիմիզատորում, որը կիրառում է առաջնային ստատիկ օպտիմալացման տեխնիկա՝ առաջնային միջանկյալ ծածկագիրը փոխակերպելու ավելի արդյունավետ միջանկյալ ներկայացման՝ միաժամանակ պահպանելով ծրագրի սկզբնական իմաստաբանությունը: Վերջին փուլում ստեղծվում է գրանցված վիրտուալ մեքենայի բայթկոդը:

Շարժիչի մեջ աջակցությամբ ՝ ECMAScript 2015 JavaScript ստանդարտի մի մասը (վերջնական նպատակը դրա ամբողջական աջակցությունն է) և ապահովում է համատեղելիություն գոյություն ունեցող React Native հավելվածների մեծ մասի հետ: Hermes-ը որոշել է չաջակցել eval(-ի տեղական կատարմանը, հայտարարություններով, արտացոլմամբ (Reflect և Proxy), Intl API-ով և RegExp-ում որոշ դրոշներով: React Native հավելվածում Hermes-ը միացնելու համար պարզապես նախագծին ավելացրեք «enableHermes: true» տարբերակը: Հնարավոր է նաև կառուցել Hermes-ը CLI ռեժիմում՝ թույլ տալով կամայական JavaScript ֆայլեր կատարել հրամանի տողից։ Վրիպազերծման համար հասանելի է ծույլ կոմպիլյացիայի ռեժիմը, որը թույլ է տալիս մշակման գործընթացում ամեն անգամ չկազմել JavaScript-ը, այլ բայթկոդ ստեղծել անմիջապես սարքի վրա:

Միևնույն ժամանակ, Facebook-ը չի նախատեսում ադապտացնել Hermes-ը Node.js-ի և այլ լուծումների համար՝ կենտրոնանալով միայն բջջային հավելվածների վրա (JIT-ի փոխարեն AOT կոմպիլյացիան ամենաօպտիմալն է բջջային համակարգերի համատեքստում, որոնք ունեն սահմանափակ RAM և ավելի դանդաղ Flash): Microsoft-ի աշխատակիցների կողմից անցկացված կատարողականի նախնական թեստավորում ցույց տվեցոր Hermes-ի օգտագործման ժամանակ Android-ի համար նախատեսված Microsoft Office հավելվածը հասանելի է դառնում օգտագործման համար 1.1 վայրկյանում։ գործարկումից հետո և սպառում է 21.5 ՄԲ օպերատիվ հիշողություն, մինչդեռ V8 շարժիչն օգտագործելիս գործարկումը տևում է 1.4 վայրկյան, իսկ հիշողության սպառումը կազմում է 30 ՄԲ:

Հավելում` Facebook հրատարակվել սեփական թեստի արդյունքները: MatterMost հավելվածով Hermes-ն օգտագործելիս աշխատանքի հասանելիությունը սկսելու ժամանակը (TTI, Time To Interact) նվազել է 4.30-ից մինչև 2.01 վայրկյան, APK փաթեթի չափը կրճատվել է 41-ից մինչև 22 ՄԲ, իսկ հիշողության սպառումը 185-ից մինչև 136: ՄԲ.

Source: opennet.ru

Добавить комментарий