Cloudflare-ը, Mozilla-ն և Facebook-ը մշակում են BinaryAST՝ JavaScript-ի բեռնումն արագացնելու համար

Ինժեներներ Cloudflare-ից, Mozilla-ից, Facebook-ից և Bloomberg-ից առաջարկեց նոր ձևաչափ Երկուական BAST արագացնել JavaScript կոդի առաքումն ու մշակումը բրաուզերում կայքեր բացելիս: BinaryAST-ը տեղափոխում է վերլուծության փուլը սերվերի կողմ և տրամադրում է արդեն ստեղծված վերացական շարահյուսական ծառը (ՀՍՏ) BinaryAST ստանալուց հետո զննարկիչը կարող է անմիջապես անցնել կոմպիլյացիայի փուլ՝ շրջանցելով JavaScript-ի սկզբնաղբյուրի վերլուծությունը։

Փորձարկման համար պատրաստված տեղեկանքի իրականացում, որը տրամադրվել է MIT լիցենզիայի ներքո: Node.js բաղադրիչներն օգտագործվում են վերլուծության համար, իսկ օպտիմալացման և AST գեներացման կոդը գրված է Rust-ով: Բրաուզերի կողմից աջակցություն
BinaryAST-ն արդեն հասանելի է Հայաստանում գիշերային շինություններ Firefox. BinaryAST-ի կոդավորիչը կարող է օգտագործվել ինչպես վերջնական կայքի գործիքավորման մակարդակում, այնպես էլ արտաքին կայքերի սկրիպտների փաթեթավորման համար վստահված անձի կամ բովանդակության առաքման ցանցի կողմից: Ներկայումս աշխատանքային խմբի կողմից BinaryAST-ի ստանդարտացման գործընթացը արդեն սկսվել է ECMA TC39, որից հետո ձևաչափը կկարողանա գոյակցել բովանդակության սեղմման գոյություն ունեցող մեթոդների հետ, ինչպիսիք են gzip-ը և brotli-ն։

Cloudflare-ը, Mozilla-ն և Facebook-ը մշակում են BinaryAST՝ JavaScript-ի բեռնումն արագացնելու համար

Cloudflare-ը, Mozilla-ն և Facebook-ը մշակում են BinaryAST՝ JavaScript-ի բեռնումն արագացնելու համար

JavaScript-ը մշակելիս զգալի ժամանակ է ծախսվում կոդի բեռնման և վերլուծման փուլում: Հաշվի առնելով, որ ներբեռնված JavaScript-ի ծավալը շատ հայտնի կայքերում մոտ է 10 ՄԲ-ին (օրինակ՝ LinkedIn-ի համար՝ 7.2 ՄԲ, Facebook-ի համար՝ 7.1 ՄԲ, Gmail-ի համար՝ 3.9 ՄԲ), JavaScript-ի նախնական մշակումը զգալի ուշացում է առաջացնում։ Բրաուզերի կողմից վերլուծման փուլը նույնպես դանդաղում է, քանի որ կոդը բեռնվում է AST-ն ամբողջությամբ կառուցելու անհնարինության պատճառով (զննարկիչը պետք է սպասի կոդերի բլոկների բեռնման ավարտին, օրինակ՝ գործառույթների ավարտին, որպեսզի ստանա): տեղեկատվությունը բացակայում է ընթացիկ տարրերը վերլուծելու համար):

Նրանք փորձում են մասնակիորեն լուծել խնդիրը՝ ծածկագիրը նվազագույնի հասցնելով և սեղմված ձևով, ինչպես նաև բրաուզերի կողմից գեներացված բայթ կոդը քեշավորելով։ Ժամանակակից կայքերում կոդը բավականին հաճախ թարմացվում է, ուստի քեշավորումը միայն մասամբ է լուծում խնդիրը: WebAssembly-ն կարող է լուծում լինել, սակայն այն պահանջում է կոդի հստակ մուտքագրում և հարմար չէ գոյություն ունեցող JavaScript կոդի մշակումն արագացնելու համար:

Մեկ այլ տարբերակ է JavaScript-ի սկրիպտների փոխարեն պատրաստի կոմպիլյատոր բայթկոդի տրամադրումը, սակայն բրաուզերի շարժիչի մշակողները դեմ են դրան, քանի որ երրորդ կողմի բայթկոդը դժվար է ստուգել, ​​դրա ուղղակի մշակումը կարող է հանգեցնել վեբ շերտավորման, անվտանգության լրացուցիչ ռիսկեր առաջացնել և զարգացնել: պահանջվում է բայթկոդի ունիվերսալ ձևաչափ:

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

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

facebook.com կոդի փորձարկումները ցույց են տվել, որ JavaScript-ի վերլուծությունը սպառում է պրոցեսորի ռեսուրսների 10-15%-ը, իսկ վերլուծությունը ավելի շատ ժամանակ է պահանջում, քան JIT-ի համար բայթկոդի և սկզբնական կոդի ստեղծումը: SpiderMonkey շարժիչում ՀՍՏ-ի ամբողջական կառուցման ժամանակը տևում է 500-800 մվ, իսկ BinaryAST-ի օգտագործումը նվազեցրել է այս ցուցանիշը 70-90%-ով:
Ընդհանուր առմամբ, վեբ հրավառությունների մեծ մասի համար, BinaryAST-ի օգտագործման ժամանակ, JavaScript-ի վերլուծման ժամանակը կրճատվում է 3-10%-ով առանց օպտիմալացման ռեժիմում և 90-97%-ով, երբ միացված է չօգտագործված ֆունկցիաների անտեսման ռեժիմը:
1.2 ՄԲ JavaScript թեստային հավաքածուն աշխատելիս, BinaryAST-ի օգտագործումը թույլ տվեց գործարկման ժամանակը արագացնել 338-ից մինչև 314 մվ աշխատասեղանի համակարգում (Intel i7) և 2019-ից մինչև 1455 մվ շարժական սարքում (HTC One M8):

Source: opennet.ru

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