Ingegneri da Cloudflare, Mozilla, Facebook è Bloomberg
Per pruvà
BinaryAST hè digià dispunibule in
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