BinaryAST: et projekt fra Cloudflare, Mozilla og Facebook for at fremskynde indlæsningen af ​​JavaScript

binær-ast

masse ingeniører fra Cloudflare, Mozilla, Facebook og Bloomberg er begyndt at arbejde på et nyt projekt kaldet “binær AST" for at fremskynde levering og behandling af JavaScript-kode når du åbner websteder i webbrowsere.

BinaryAST tager parsefasen til serversiden og leverer et allerede genereret Abstract Syntax Tree (AST). Efter modtagelse af BinaryAST kan browseren straks gå til kompileringsfasen uden at gå gennem JavaScript-kildekodeanalyse.

En referenceimplementering udarbejdet under MIT-licenserne er forberedt til test. Node.js-komponenter bruges til at analysere koden for at optimere og generere AST, den er skrevet i Rust.

Encoderen i BinaryAST kan bruges både på slutwebsitetens værktøjssætniveau og til at pakke eksterne webstedsskripter på proxysiden eller indholdsleveringsnetværket.

På nuværende tidspunkt BinaryAST-standardiseringsprocessen fra ECMA TC39-arbejdsgruppen er allerede startet, hvorefter formatet kan eksistere sammen med eksisterende metoder til komprimering af det leverede indhold, såsom gzip og brotli.

Så mange javascript-filer påvirker indlæsningen af ​​websider

Betydelig tid under JavaScript-behandling tager fasen med at indlæse og parsere koden.

I betragtning af det faktum, at mængden af ​​JavaScript indlæses på mange populære websteder er tæt på 10 MB (for eksempel til LinkedIn - 7.2 MB, Facebook - 7.1 MB, Gmail - 3.9 MB), processen JavaScript initial indfører en betydelig forsinkelse.

Analysetrinnet på browsersiden bremses også på grund af manglende evne til at oprette en AST i farten, mens koden indlæses (browseren skal vente på indlæsning af kodeblokke, for eksempel slutningen af ​​funktioner, for at få de manglende oplysninger til at analysere de aktuelle elementer).

Delvis forsøger de at løse problemet ved at distribuere koden i en minimeret og komprimeret form såvel som ved cache, der genereres af browseren.

Binær-ast-1

Mens der på moderne websteder bliver koden opdateret ganske ofte, så caching løser kun delvist problemet.

Løsningen kan være WebAssembly, men det kræver eksplicit brug af at skrive i koden og det er ikke velegnet til at fremskynde behandlingen af ​​eksisterende JavaScript-kode.

En anden mulighed er at levere færdiglavet kompileret kode i stedet for JavaScript-scripts, men browser-motorudviklere er imod det, da tredjepartskode er vanskelig at kontrollere, kan dens direkte behandling føre til adskillelse fra internettet., Der opstår yderligere sikkerhedstrusler. .

BinaryAST er løsningen

BinaryAST tillader integration i den nuværende udviklingsmodel og kode levering uden at oprette en ny bytekode og uden at ændre JavaScript-sproget.

Datastørrelse i BinaryAST-format kan sammenlignes med minificeret JavaScript-kode og komprimeret, og behandlingshastigheden på grund af udelukkelsen af ​​kildeanalysefasen stiger bemærkelsesværdigt.

Formatet tillader også kompilering til bytekode, når BinaryAST indlæses uden at vente på, at alle data er færdige.

En funktion af BinaryAST er også muligheden for at gendanne læselig JavaScript, ikke en-til-en, der matcher den originale version, men er semantisk ækvivalent og indeholder de samme variabel- og funktionsnavne (BinaryAST gemmer navnene, men gemmer ikke placeringsoplysninger i koden, formatering og kommentarer).

Den anden side af mønten er udseendet af nye vektorer til angreb, men ifølge udviklerne er de betydeligt mindre og mere kontrollerbare end ved brug af alternativer, såsom distribution af bytekoder.

Test af facebook-kode viste 10-15% af CPU-ressourcerne de bruges på JavaScript-parsing, og det tager længere tid at analysere, end det gør at generere bytekode og indledende kodegenerering til JIT.

Støtten fra BinaryAST er nu tilgængelig i Nightly-versionerne af Firefox.

kilde: https://blog.cloudflare.com


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.