BinaryAST: projekt Cloudflarea, Mozille i Facebooka za ubrzavanje učitavanja JavaScript-a

binarno-ast

The inženjeri iz Cloudflarea, Mozille, Facebooka i Bloomberga su počeli raditi na novi projekt pod nazivom „BinarniAST" kako bi se ubrzala isporuka i obrada JavaScript koda prilikom otvaranja web mjesta u web preglednicima.

BinaryAST odvodi fazu raščlanjivanja na stranu poslužitelja i isporučuje već generirano stablo apstraktne sintakse (AST). Nakon primanja BinaryAST, preglednik može odmah prijeći u fazu kompilacije, bez prolaska kroz analizu JavaScript koda.

Za testiranje je pripremljena referentna implementacija pripremljena prema licencama MIT, a komponente Node.js koriste se za analizu koda radi optimizacije i generiranja AST-a, napisano je u Rustu.

Kodiranje u BinaryAST-u može se koristiti i na razini alata završne stranice i za pakiranje skripti vanjskih stranica na proxy strani ili mreži za dostavu sadržaja.

Trenutno, postupak standardizacije BinaryAST od strane radne skupine ECMA TC39 već je započeo, nakon čega će format moći koegzistirati s postojećim metodama komprimiranja isporučenog sadržaja, kao što su gzip i brotli.

Toliko javascript datoteka utječe na učitavanje web stranica

Znatno vrijeme tijekom JavaScript obrade traje u fazi učitavanja i raščlanjivanja koda.

Uzimajući u obzir činjenicu da se količina JavaScript učitala na mnogim popularnim web mjestima je blizu 10 MB (na primjer, za LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), postupak JavaScript početni uvodi značajno kašnjenje.

Faza analitike na strani preglednika također se usporava zbog nemogućnosti stvaranja AST-a u letu dok se kôd učitava (preglednik mora pričekati učitavanje blokova koda, na primjer kraj funkcija, kako bi informacije koje nedostaju dobivale raščlanjivanje trenutnih elemenata).

Djelomično problem pokušavaju riješiti distribucijom koda u minimiziranom i komprimiranom obliku, kao i predmemoriranjem koje generira preglednik.

Binarni-ast-1

Dok se na modernim web mjestima kôd ažurira prilično često, pa predmemoriranje samo djelomično rješava problem.

Rješenje bi moglo biti WebAssembly, ali zahtijeva izričitu upotrebu pisanja u kodu i nije pogodan za ubrzavanje obrade postojećeg JavaScript koda.

Druga mogućnost je isporuka gotovog kompiliranog koda umjesto JavaScript skripti, ali programeri mehanizma preglednika tome se protive, jer je kod nezavisnih proizvođača teško provjeriti, njegova izravna obrada može dovesti do odvajanja od weba. Javljaju se dodatne sigurnosne prijetnje .

BinaryAST je rješenje

BinaryAST omogućuje integraciju u trenutni razvojni model i isporuka koda bez stvaranja novog bytecode-a i bez promjene jezika JavaScript.

Veličina podataka u BinaryAST formatu usporediva je s umanjenim JavaScript kodom i komprimirana, a brzina obrade zbog isključenja faze analize izvora izuzetno se povećava.

Također, format omogućuje kompajliranje u bytecode kako se BinaryAST učitava, bez čekanja da se svi podaci dovrše.

Značajka BinaryAST-a je također mogućnost vraćanja čitljivog JavaScript-a, ne jedan na jedan koji se podudara s izvornom verzijom, ali je semantički ekvivalentan i uključuje iste nazive varijabli i funkcija (BinaryAST sprema imena, ali ne sprema podatke o položaju u kodu, oblikovanju i komentarima).

Druga strana medalje je pojava novih vektora za napade, no prema programerima, oni su znatno manji i kontroliraniji nego uz upotrebu alternativa, poput bajt-distribucije koda.

Testiranje facebook koda pokazalo je 10-15% CPU resursa troše se na raščlanjivanje JavaScripta i treba im više vremena za raščlanjivanje nego za generiranje bajtkoda i početno generiranje koda za JIT.

Podrška BinaryAST je sada dostupan u Nightly verzijama Firefoxa.

izvor: https://blog.cloudflare.com


Budite prvi koji će komentirati

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.