Inženieri no Cloudflare, Mozilla, Facebook un Bloomberg
Pārbaudei
BinaryAST jau ir pieejams
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