Cloudflare, Mozilla un Facebook izstrādā BinaryAST, lai paātrinātu JavaScript ielādi

Inženieri no Cloudflare, Mozilla, Facebook un Bloomberg piedāvāja jauns formāts BinārsAST lai paātrinātu JavaScript koda piegādi un apstrādi, atverot vietnes pārlūkprogrammā. BinaryAST pāriet parsēšanas fāzi uz servera pusi un nodrošina jau izveidotu abstraktu sintakses koku (AST). Saņemot BinaryAST, pārlūkprogramma var nekavējoties pāriet uz kompilācijas stadiju, apejot JavaScript avota koda parsēšanu.

Pārbaudei sagatavots atsauces ieviešana, kas nodrošināta saskaņā ar MIT licenci. Parsēšanai tiek izmantoti Node.js komponenti, un kods AST optimizēšanai un ģenerēšanai ir rakstīts Rust valodā. Pārlūka sānu atbalsts
BinaryAST jau ir pieejams nakts montāža Firefox. BinaryAST kodētāju var izmantot gan galīgās vietnes rīku komplekta līmenī, gan ārējo vietņu skriptu iesaiņošanai starpniekservera vai satura piegādes tīkla pusē. Šobrīd BinaryAST standartizācijas process, ko veic darba grupa, jau ir sācies. ECMA TC39, pēc kura formāts var pastāvēt līdzās esošajām noteiktā satura saspiešanas metodēm, piemēram, gzip un brotli.

Cloudflare, Mozilla un Facebook izstrādā BinaryAST, lai paātrinātu JavaScript ielādi

Cloudflare, Mozilla un Facebook izstrādā BinaryAST, lai paātrinātu JavaScript ielādi

Ievērojamu laiku JavaScript apstrādē aizņem koda ielādes un parsēšanas fāze. Ņemot vērā, ka daudzās populārās vietnēs lejupielādētā JavaScript apjoms tuvojas 10 MB (piemēram, LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), JavaScript sākotnējā apstrāde rada ievērojamu aizkavēšanos. Parsēšanas posms pārlūkprogrammas pusē ir arī palēnināts, jo nav iespējams pilnībā izveidot AST lidojuma laikā, kad kods tiek ielādēts (pārlūkprogrammai ir jāgaida, līdz tiek pabeigta koda bloku ielāde, piemēram, funkciju beigas, lai iegūtu trūkstošo informāciju pašreizējo elementu parsēšanai).

Daļēji viņi mēģina atrisināt problēmu, izplatot kodu minimizētā un saspiestā formā, kā arī pārlūkprogrammas kešatmiņā saglabājot ģenerēto baitkodu. Mūsdienu vietnēs kods tiek atjaunināts diezgan bieži, tāpēc kešatmiņa tikai daļēji atrisina problēmu. WebAssembly varētu būt risinājums, taču tam ir nepieciešama precīza koda ievadīšana, un tas nav labi piemērots, lai paātrinātu jau esošā JavaScript koda apstrādi.

Vēl viena iespēja ir JavaScript skriptu vietā nosūtīt iepriekš kompilētu baitkodu, taču pārlūkprogrammas dzinēju izstrādātāji iebilst, jo trešās puses baitkodu ir grūti pārbaudīt, tā tiešā apstrāde var novest pie tīmekļa slāņošanās, rodas papildu drošības riski un universāla programmatūras izstrāde. ir nepieciešams baitu koda formāts.

BinaryAST ļauj iekļauties pašreizējā koda izstrādes un piegādes modelī, neveidojot jaunu baitkodu un nemainot JavaScript valodu. Datu lielums BinaryAST formātā ir salīdzināms ar saspiesto minimizēto JavaScript kodu, un apstrādes ātrums ir ievērojami palielināts, jo netiek izslēgta avota koda parsēšanas fāze. Turklāt formāts ļauj apkopot baitu kodā, kad tiek ielādēts BinaryAST, negaidot visu datu saņemšanu. Turklāt parsēšana servera pusē ļauj izslēgt neizmantotās funkcijas un papildu kodu no atgrieztā BinaryAST attēlojuma, kas, parsējot pārlūkprogrammas pusē, prasa laiku gan parsēšanai, gan papildu trafika pārsūtīšanai.

BinaryAST iezīme ir arī iespēja atjaunot lasāmu JavaScript, kas ir vairāk nekā viens identisks sākotnējai versijai, bet semantiski līdzvērtīgs un ietver tos pašus mainīgo un funkciju nosaukumus (BinaryAST saglabā nosaukumus, bet nesaglabā informāciju par pozīcijām kods, formatējums un komentāri). Otra medaļas puse ir jaunu uzbrukuma vektoru parādīšanās, taču, pēc izstrādātāju domām, tie ir daudz mazāki un vairāk kontrolējami nekā alternatīvas, piemēram, baitkoda izplatīšana.

Facebook.com kodu testi ir parādījuši, ka 10-15% no CPU resursiem tiek tērēti JavaScript parsēšanai, un parsēšana aizņem vairāk laika nekā baitkoda ģenerēšana un sākotnējā koda ģenerēšana JIT. SpiderMonkey dzinējā laiks, lai pabeigtu AST uzbūvi, aizņem 500-800 ms, un BinaryAST izmantošana samazināja šo skaitli par 70-90%.
Parasti lielākajai daļai tīmekļa uguņošanas ierīču, izmantojot BinaryAST, JavaScript parsēšanas laiks tiek samazināts par 3-10% režīmā bez optimizācijas un par 90-97%, ja ir iespējots neizmantoto funkciju ignorēšanas režīms.
Izpildot 1.2 MB JavaScript testa komplektu, izmantojot BinaryAST, startēšanas sākuma laiks tika paātrināts no 338 līdz 314 ms galddatora sistēmā (Intel i7) un no 2019. gada līdz 1455 ms mobilajā ierīcē (HTC One M8).

Avots: opennet.ru

Pievieno komentāru