Cloudflare, Mozilla sareng Facebook ngembangkeun BinaryAST pikeun nyepetkeun loading JavaScript

Insinyur ti Cloudflare, Mozilla, Facebook sareng Bloomberg ditawarkeun format anyar BinérASTAST pikeun nyepetkeun pangiriman sareng ngolah kode JavaScript nalika muka situs dina browser. BinaryAST mindahkeun fase parsing ka sisi server sareng nyayogikeun tangkal sintaksis abstrak anu parantos dihasilkeun (AST). Saatos nampi BinaryAST, browser tiasa langsung kana tahap kompilasi, ngalangkungan parsing kode sumber JavaScript.

Pikeun tés disiapkeun palaksanaan rujukan disadiakeun dina lisénsi MIT. komponén Node.js dipaké pikeun parsing, jeung kode pikeun optimasi sarta generasi AST ditulis dina Rust. Rojongan sisi browser
BinaryAST parantos sayogi di assembly peuting Firefox. Encoder di BinaryAST tiasa dianggo boh dina tingkat perkakas situs tungtung sareng pikeun skrip bungkusan situs éksternal di sisi proxy atanapi jaringan pangiriman eusi. Ayeuna, prosés standarisasi BinaryAST ku kelompok kerja parantos dimimitian ECMA TC39, sanggeus éta format bakal bisa hirup babarengan jeung métode komprési eusi aya, kayaning gzip na brotli.

Cloudflare, Mozilla sareng Facebook ngembangkeun BinaryAST pikeun nyepetkeun loading JavaScript

Cloudflare, Mozilla sareng Facebook ngembangkeun BinaryAST pikeun nyepetkeun loading JavaScript

Nalika ngolah JavaScript, jumlah anu ageung waktos diséépkeun dina fase loading sareng parsing kode éta. Nganggap yén volume JavaScript anu diunduh dina seueur situs populér caket 10 MB (contona, pikeun LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), pamrosésan awal JavaScript ngenalkeun reureuh anu signifikan. Tahap parsing di sisi browser ogé kalem alatan henteu mampuh pikeun pinuh ngawangun AST on laleur salaku kode dimuat (browser kudu ngadagoan blok kode pikeun ngalengkepan loading, kayaning tungtung fungsi, pikeun ménta informasi leungit pikeun parse elemen ayeuna).

Aranjeunna nyobian sawaréh ngabéréskeun masalah ku cara nyebarkeun kode dina bentuk anu diminimalkeun sareng dikomprés, ogé ku cache bytecode anu dihasilkeun ku browser. Dina situs modéren, kodeu sering diénggalan, janten cache ngan ukur sawaréh ngarengsekeun masalah. WebAssembly tiasa janten solusi, tapi peryogi ngetik kode anu eksplisit sareng henteu cocog pikeun nyepetkeun ngolah kode JavaScript anu tos aya.

Pilihan séjén nyaéta ngirimkeun bytecode anu disusun siap-siap tibatan skrip JavaScript, tapi pamekar mesin browser henteu ngalawan éta kusabab bytecode pihak katilu sesah diverifikasi, pamrosésan langsungna tiasa nyababkeun stratifikasi Wéb, résiko kaamanan tambahan timbul, sareng pamekaran format bytecode universal diperlukeun.

BinaryAST ngidinan Anjeun pikeun nyocogkeun kana ngembangkeun kode anjeun ayeuna jeung model pangiriman tanpa nyieun bytecode anyar atawa ngarobah basa JavaScript. Ukuran data dina format BinaryAST nyaeta comparable mun dikomprés kode JavaScript minified, sarta speed processing ku ngaleungitkeun fase parsing téks sumber naek noticeably. Salaku tambahan, format ngamungkinkeun kompilasi pikeun bytecode nalika BinaryAST dimuat, tanpa ngantosan sadaya data réngsé. Salaku tambahan, parsing di sisi server ngamungkinkeun anjeun ngaluarkeun fungsi anu henteu kapake sareng kode anu teu dipikabutuh tina perwakilan BinaryAST anu dipulangkeun, anu, nalika parsing di sisi browser, ngabuang waktos parsing sareng ngirimkeun lalu lintas anu teu perlu.

Fitur BinaryAST ogé kamampuan pikeun mulangkeun JavaScript anu tiasa dibaca anu henteu persis sami sareng versi aslina, tapi semantically sarimbag sareng kalebet nami variabel sareng fungsi anu sami (BinaryAST nyimpen nami, tapi henteu nyimpen inpormasi ngeunaan posisi di kode, pormat sareng koméntar). Sisi séjén koin nyaéta mecenghulna vektor serangan anyar, tapi nurutkeun pamekar, aranjeunna leuwih leutik sarta leuwih controllable ti lamun ngagunakeun alternatif, kayaning distribution bytecode.

Tés kode facebook.com némbongkeun yén parsing JavaScript meakeun 10-15% sumberdaya CPU na parsing nyokot leuwih waktos ti generating bytecode sarta generasi kode awal pikeun JIT. Dina mesin SpiderMonkey, waktos pikeun ngawangun AST peryogi 500-800 mdet, sareng panggunaan BinaryAST ngirangan angka ieu ku 70-90%.
Sacara umum, pikeun kalolobaan kembang api wéb, nalika nganggo BinaryAST, waktos parsing JavaScript dikirangan ku 3-10% dina modeu tanpa optimasi sareng ku 90-97% nalika mode teu malire fungsi anu henteu dianggo diaktipkeun.
Nalika ngajalankeun set tés JavaScript 1.2 MB, nganggo BinaryAST ngamungkinkeun waktos ngamimitian nyepetkeun tina 338 ka 314 mdet dina sistem desktop (Intel i7) sareng ti 2019 dugi ka 1455 mdet dina alat sélulér (HTC One M8).

sumber: opennet.ru

Tambahkeun komentar