Cloudflare, Mozilla lan Facebook ngembangake BinaryAST kanggo nyepetake loading JavaScript

Insinyur saka Cloudflare, Mozilla, Facebook lan Bloomberg ditawakake format anyar binaryAST kanggo nyepetake pangiriman lan pangolahan kode JavaScript nalika mbukak situs ing browser. BinaryAST njupuk fase parsing menyang sisih server lan nyedhiyakake wit sintaksis abstrak sing wis dibentuk (AST). Sawise nampa BinaryAST, browser bisa langsung menyang tahap kompilasi, ngliwati parsing kode sumber JavaScript.

Kanggo tes disiapake implementasi referensi diwenehake miturut lisensi MIT. Kanggo parsing, komponen Node.js digunakake, lan kode kanggo ngoptimalake lan ngasilake AST ditulis ing Rust. Dhukungan sisih browser
BinaryAST wis kasedhiya ing majelis wengi Firefox. Enkoder ing BinaryAST bisa digunakake ing tingkat toolkit ing situs pungkasan, lan kanggo skrip kemasan situs eksternal ing sisih proxy utawa jaringan pangiriman konten. Saiki, proses standarisasi BinaryAST dening klompok kerja wis diwiwiti. ECMA TC39, sawise format kasebut bisa urip bebarengan karo metode kompres sing wis ana, kayata gzip lan brotli.

Cloudflare, Mozilla lan Facebook ngembangake BinaryAST kanggo nyepetake loading JavaScript

Cloudflare, Mozilla lan Facebook ngembangake BinaryAST kanggo nyepetake loading JavaScript

Jumlah wektu sing signifikan ing pangolahan JavaScript dijupuk dening fase loading lan parsing kode kasebut. Ngelingi yen jumlah JavaScript sing diundhuh ing akeh situs populer wis nyedhaki 10 MB (contone, kanggo LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), pangolahan awal JavaScript ngenalake wektu tundha sing signifikan. Tahap parsing ing sisih browser uga kalem amarga ora bisa mbangun AST kanthi cepet amarga kode kasebut dimuat (browser kudu ngenteni pamblokiran kode rampung loading, contone, pungkasan fungsi, ing supaya entuk informasi sing ilang kanggo ngurai unsur saiki).

Sebagean, dheweke nyoba ngatasi masalah kasebut kanthi nyebarake kode kasebut ing wangun sing diminimalisir lan dikompres, uga kanthi cache bytecode sing digawe dening browser. Ing situs modern, kode kasebut asring dianyari, saengga caching mung bisa ngrampungake masalah kasebut. WebAssembly bisa dadi solusi, nanging mbutuhake nggunakake ketik eksplisit ing kode lan ora cocog kanggo nyepetake pangolahan kode JavaScript sing wis ana.

Pilihan liyane yaiku ngirim bytecode sing wis dikompilasi tinimbang skrip JavaScript, nanging pangembang mesin browser nentang amarga bytecode pihak katelu angel diverifikasi, pangolahan langsung bisa nyebabake lapisan Web, risiko keamanan tambahan muncul, lan pangembangan universal. format bytecode dibutuhake.

BinaryAST ngidini sampeyan pas karo model pangembangan lan pangiriman kode saiki tanpa nggawe bytecode anyar lan tanpa ngganti basa JavaScript. Ukuran data ing format BinaryAST bisa dibandhingake karo kode JavaScript minified sing dikompres, lan kacepetan pangolahan tambah akeh amarga ora ana fase parsing kode sumber. Kajaba iku, format kasebut ngidini kompilasi dadi bytecode nalika BinaryAST dimuat, tanpa ngenteni kabeh data ditampa. Kajaba iku, parsing ing sisih server ngidini sampeyan ngilangi fungsi sing ora digunakake lan kode ekstra saka perwakilan BinaryAST sing bali, sing, nalika diurai ing sisih browser, butuh wektu kanggo ngurai lan ngirim lalu lintas ekstra.

Fitur BinaryAST uga minangka kemampuan kanggo mulihake JavaScript sing bisa diwaca sing ora cocog karo versi asline, nanging padha karo semantik lan kalebu jeneng variabel lan fungsi sing padha (BinaryAST nyimpen jeneng, nanging ora nyimpen informasi babagan posisi ing kode, format. lan komentar). Sisih liyane koin yaiku munculé vektor serangan anyar, nanging miturut pangembang, luwih cilik lan bisa dikontrol tinimbang alternatif kayata distribusi bytecode.

Tes kode Facebook.com nuduhake yen 10-15% sumber daya CPU digunakake kanggo parsing JavaScript lan parsing mbutuhake wektu luwih akeh tinimbang generasi bytecode lan generasi kode awal kanggo JIT. Ing mesin SpiderMonkey, wektu kanggo ngrampungake konstruksi AST njupuk 500-800 ms, lan panggunaan BinaryAST nyuda angka iki kanthi 70-90%.
Umumé, kanggo umume kembang api web, nalika nggunakake BinaryAST, wektu parsing JavaScript dikurangi 3-10% ing mode tanpa optimasi lan 90-97% nalika mode ora nggatekake fungsi sing ora digunakake diaktifake.
Nalika nglakokake suite tes JavaScript 1.2 MB, nggunakake BinaryAST nyepetake wektu wiwitan wiwitan saka 338 dadi 314 ms ing sistem desktop (Intel i7) lan saka 2019 nganti 1455 ms ing piranti seluler (HTC One M8).

Source: opennet.ru

Add a comment