Opera får mye raskere Javascript-motor

Vil fyke forbi konkurrentene, lover Opera Software.

Opera Software introduserte i natt Carakan, en helt ny JavaScript-motor som skal brukes i kommende utgaver av Opera-nettleseren.

- Den er i noen tester opptil 50 ganger raskere enn Opera nåværende JavaScript-motor, og vi regner med at den kommer til å fyke forbi alle konkurrentene når den blir videre utviklet, forteller Tor Odland, kommunikasjonsdirektør i Opera Software, til digi.no.

I et blogginnlegg skriver Opera-utvikleren Jens Lindström at ECMAScript/JavaScript-motoren i dagens Opera-versjoner, Futhark, først og fremst ble laget med mål om at den skulle være kompakt og bruke lite minne, i stedet for å oppnå maksimal kjørehastighet.

- Webben er omgivelser som endrer seg, og morgendagens avanserte webapplikasjoner krever raskere ECMAScript-kjøring, så vi har nå tatt utfordringen med å nok en gang å utvikle den raskeste ECMAScript-motoren på markedet, skriver Lindström.

Den høye ytelsen skal oppnås i hovedsak gjennom tre ulike tilnærminger.

Det ene er overgangen fra stabelbasert bytekode til registerbasert bytekode. Ved å bruke flere registre med fast størrelse i stedet for en stabel med verdier med dynamisk størrelse, vil instruksjonene kunne få raskere tilgang til dataene. Dette fordi instruksjonen gis tilgang til ethvert register, i stedet for bare verdiene på toppen av stabelen.

- Siden det ikke er behov for å kopiere verdier til og fra toppen av stabelen for å kunne arbeide med dem, trenger færre instruksjoner å bli kjørt, og mindre data må kopieres, skriver Lindström.

Den andre metoden som skal bidra til økt fart, er generering av systemspesifikk kode. Ved å implementere kompilering av hele eller deler av JavaScript-programmer og -funksjoner til systemspesifikk kode, skal man kunne oppnå langt mer effektiv kjøring av koden enn det som er mulig i en bytekode-tolker.

Motoren generer også systemspesifikk kode som utfører sammenligningen til enkle, regulære uttrykk. Dette skal gi betydelig økt ytelse ved enkle søk i lange strenger. Forøvrig bygger motoren for regulære uttrykk på den som finnes i nettlesermotoren Presto 2.2, som benyttes i Opera 10 Alpha.

Den tredje metoden dreier seg om automatisk klassifisering av objekter, hvor hvert objekt tildeles en klasse som samler diverse informasjon om objektet, blant annet dets prototype, rekkefølge og navn på noen eller alle egenskapene.

Objekter med den samme prototypen og de samme egenskapene tildeles den samme klassen. I praksis kan det forventes at de fleste programmer som oppretter mange objekter, likevel bare har noen få ulike objektklasser. Siden det mest av de komplekse objektstrukturene lagres i klassene, og dermed deles med alle andre objekter av den samme klassen, skal man kunne spare betydelige mengder med minne i programmer som har mange objekter av den samme klassen.

Det at objekter av samme klasse har samme egenskaper, kan gjøre kjøringen raskere. Dersom man har vet at egenskapen "X" til det første objektet har verdien "Y", vet man at det samme oppslaget mot det andre objektet vil gi samme resultatet. Dermed kan resultatene lagres i en cache, noe som skal gi store ytelsesforbedringer ved kjøring av kode som har mange lese- eller skriveinstruksjoner.

Dagens utgave av Carakan-motoren er tilpasset 32- og 64-bits x86-prosesssorer. Den utfører ifølge Lindström den mye brukte SunSpider-testen 2,5 ganger raskere enn ECMAScript-motoren i Opera 10 Alpha, selv uten bruk av systemspesifikk kodegenerering.

Opera Software har nå startet arbeidet med å systemspesifikk kodegenerering til andre prosessorarkitekturer også, inkludert ARM.

    Les også:

Til toppen