Dansk udvikler: Sådan satte vi turbolader på Chromes V8-motor

Bedre Javascript-ydelse var centralt i salgstalen for den nye version 2.0 af Google-browseren Chrome. Google-udvikler Mads Ager fortæller her, hvordan de danske udviklere fik klemt 30 procent bedre ydelse ind i Javascript-motoren V8.

Afviklingen af Javascript-kode er blevet op til 30 procent hurtigere i den nye version 2.0 af Googles browser Chrome, og dét tryk på speederen har været det vigtigste indsatsområde for det danske udviklingshold, der står bag Javascript-motoren V8.

Når brugeren besøger en hjemmeside, er det nemlig i stigende grad Javascript-kode, der sørger for funktionaliteten på hjemmesiden, og det kan ofte give ventetid.

»Vores overordnede mål med Chrome 2.0 var at få hurtigere Javascript-eksekvering for alle brugere. Det har vi opnået ved at lave to store forbedringer og ved at fintune flere forskellige steder i systemet,« siger Google-udvikler Mads Ager, der arbejder på V8.

To store forbedringer og lidt fintuning
De to store punkter på listen over forbedringer er en ny komponent til behandling af regulære udtryk, der håndterer tekststrenge mere effektivt, og en ny compiler, der benytter sig af registerallokering, da det er betydeligt hurtigere at arbejde i CPU'ens registre frem for computerens hukommelse.

»Når vi modtager en klump Javascript-kode over nettet, tager vores compiler fat i den og generer maskinkode, som kan udføres på brugerens computer. Det har været nødvendigt helt fra begyndelsen at have en compiler som en integreret del af V8-motoren, og i den nye compiler har vi så implementeret registerallokering for at generere kode, der kører hurtigere,« siger Mads Ager.

Den regulære udtrykskomponent i V8 håndterer Javascripts regulære udtryk, som en Javascript-programmører kan bruge til at søge i de brugte tekststrenge. I den tidligere version af V8 brugte udviklerne standardbiblioteket Perl Compatible Regular Expressions (PCRE), men det arbejdede ikke særlig godt sammen med Javascripts måde at håndtere regulære udtryk på.

Derfor gik V8-folkene i første omgang over til en mere Javascipt-specifik version, JSCRE.

»Det virkede sådan set fint nok, men det var ikke særlig effektivt. Vi blev nødt til at lave for mange strengkonverteringer, da vi repræsenterer tekststrenge anderledes internt i V8,« siger Mads Ager.

»Derfor har vi implementeret vores egen regulære udtrykskomponent, som slipper uden om alle strengkonverteringerne og benytter sig af nogle smartere algoritmer,« uddyber Mads Ager.

Den nye regulære udtrykskomponent tager de regulære udtryk og laver dem om til en udvidet version af en endelig automat - en tilstandsmaskine. Det gøres af den simple grund, at det er nemmere at arbejde med tilstandsmaskinen i forhold til det oprindelige regulære udtryk, som blot er en tekststreng.

»Det er det samme princip som med en compiler, hvor det første man gør, er at opbygge et abstrakt syntakstræ ud fra den kildekode, man har. Det giver en ny repræsentation, som er nemmere at arbejde med, og det er det samme med automaten, som for os er nemmere at arbejde med end regulære udtryk,« siger Mads Ager.

Svært at spå om fremtidige forbedringer
Alt i alt har de to forbedringer udgjort kernen i performanceoptimeringen i den nye Chrome 2.0, der dog ikke er sluppet for en række finpudsninger hist og her.

»Det at overføre kontrollen til noget kode, der ligger et andet sted, koster noget. Derfor har vi fjernet en del funktionskald i koden og implementet det inline i stedet. Derudover har vi kigget på at optimere biblioteksrutiner i Javascripts standardbibliotek, der opererer på tal, strenge og datoer,« siger Mads Ager.

Han kan ikke sætte tal på, hvor store forbedringer V8-teamet forventer på performanceområdet i næste version af Chrome.

»Det er svært at sige på forhånd, hvor store forbedringer vi kan komme op med fremover, men det er vores erklærede hensigt at blive ved med at forbedre Javascript-performance. Vi er på ingen måde færdige endnu,« siger Mads Ager.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (2)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Log ind eller Opret konto for at kommentere