Cloudflare, Mozilla è Facebook sviluppanu BinaryAST per accelerà a carica di JavaScript

Ingegneri da Cloudflare, Mozilla, Facebook è Bloomberg uffertu novu furmatu binariu AST per accelerà a consegna è a trasfurmazioni di codice JavaScript quandu apre siti in u navigatore. BinaryAST move a fase di analisi à u latu di u servitore è furnisce un arbre di sintassi astratta digià generatu (AST). Dopu avè ricivutu un BinaryAST, u navigatore pò passà immediatamente à a fase di compilazione, sguassendu l'analisi di u codice fonte JavaScript.

Per pruvà preparatu implementazione di riferimentu furnita sottu a licenza MIT. I cumpunenti Node.js sò usati per l'analisi, è u codice per l'optimizazione è a generazione AST hè scrittu in Rust. Supportu da u navigatore
BinaryAST hè digià dispunibule in assemblea di notte Firefox. L'encoder in BinaryAST pò esse usatu sia à u livellu di l'uttellu di u situ finale sia per i script di imballaggio di siti esterni à u latu di una rete di proxy o di cuntenuti. Attualmente, u prucessu di standardizazione di BinaryAST da u gruppu di travagliu hà digià principiatu ECMA TC39, dopu chì u formatu hà da pudè coesiste cù i metudi di cumpressione di cuntenutu esistenti, cum'è gzip è brotli.

Cloudflare, Mozilla è Facebook sviluppanu BinaryAST per accelerà a carica di JavaScript

Cloudflare, Mozilla è Facebook sviluppanu BinaryAST per accelerà a carica di JavaScript

Quandu si tratta JavaScript, una quantità significativa di tempu hè spesa in a fase di carica è di analisi di u codice. Cunsiderendu chì u voluminu di JavaScript scaricatu in parechji siti populari hè vicinu à 10 MB (per esempiu, per LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), u prucessu iniziale di JavaScript introduce un ritardu significativu. A tappa di parsing da u latu di u navigatore hè ancu rallentata per via di l'incapacità di custruisce cumplettamente l'AST à a mosca mentre u codice hè caricatu (u navigatore deve aspittà chì i blocchi di codice finiscinu a carica, cum'è a fine di e funzioni, per ottene. l'infurmazioni mancanti per analizà l'elementi attuali).

Pruvanu di risolve in parte u prublema distribuendu u codice in una forma minimizata è cumpressa, è ancu caching u bytecode generatu da u navigatore. In i siti muderni, u codice hè aghjurnatu abbastanza spessu, cusì caching solu parzialmente risolve u prublema. WebAssembly puderia esse una suluzione, ma hè bisognu di scrive esplicitu in u codice è ùn hè micca bè adattatu per accelerà a trasfurmazioni di u codice JavaScript esistente.

Un'altra opzione hè di furnisce bytecode compilatu prontu inveci di script JavaScript, ma i sviluppatori di u mutore di navigatore sò contru à questu, perchè u bytecode di terzu hè difficiule di verificà, u so prucessu direttu pò purtà à stratificazione Web, risichi di sicurezza supplementari nascenu, è u sviluppu di un furmatu di bytecode universale hè necessariu.

BinaryAST vi permette di mette in u vostru mudellu di sviluppu di codice attuale è di consegna senza creà un novu bytecode o cambià a lingua JavaScript. A dimensione di e dati in u formatu BinaryAST hè paragunabile à u codice JavaScript minificatu cumpressu, è a velocità di trasfurmazioni eliminendu a fase di analisi di u testu fonte aumenta notevolmente. Inoltre, u formatu permette a compilazione à bytecode cum'è BinaryAST hè caricatu, senza aspittà chì tutti i dati finiscinu. Inoltre, l'analisi nantu à u latu di u servitore permette di escludiri e funzioni inutilizate è u codice innecessariu da a rapprisintazioni BinaryAST tornata, chì, quandu analizà in u latu di u navigatore, perdi u tempu sia parsing è trasmette trafficu innecessariu.

Una funzione di BinaryAST hè ancu a capacità di restaurà JavaScript leggibile chì ùn hè micca esattamente uguale à a versione originale, ma hè semanticamente equivalente è includenu i stessi nomi di variàbili è funzioni (BinaryAST salva i nomi, ma ùn salva micca l'infurmazioni nantu à e pusizioni in u codice, furmatu è cumenti). L'altra parte di a munita hè l'emergenza di novi vettori d'attaccu, ma sicondu i sviluppatori, sò assai più chjuchi è più cuntrullabili chì quandu utilizanu alternative, cum'è a distribuzione bytecode.

I testi di u codice facebook.com anu dimustratu chì l'analisi JavaScript cunsuma 10-15% di e risorse di CPU è l'analisi piglia più tempu di generazione di bytecode è generazione di codice iniziale per JIT. In u mutore SpiderMonkey, u tempu di custruisce cumplettamente un AST piglia 500-800 ms, è l'usu di BinaryAST hà riduciutu sta figura da 70-90%.
In generale, per a maiò parte di i fuochi d'artificiu web, quandu si usa BinaryAST, u tempu di analisi JavaScript hè ridutta da 3-10% in u modu senza ottimisazione è da 90-97% quandu u modu di ignorà e funzioni inutilizate hè attivatu.
Quandu eseguite un set di teste JavaScript di 1.2 MB, utilizendu BinaryAST hà permessu à u tempu di startup per accelerà da 338 à 314 ms in un sistema di desktop (Intel i7) è da 2019 à 1455 ms in un dispositivu mobile (HTC One M8).

Source: opennet.ru

Add a comment