Den nyeste, store Creators Update til Windows 10, som Microsoft er i ferd med å rulle ut til brukerne, inneholder også en oppdatert versjon av Edge-nettleseren. Og Microsoft fortsetter med en litt annen tilnærming til en helt sentral komponent enn konkurrentene.
JavaScript-motoren er en viktig del av en moderne nettleser fordi større og tyngre applikasjoner, samt styring av brukergrensesnittkomponenter, er avhengige av JavaScript. Googles V8-motor, Mozillas SpiderMonkey og Webkits JavaScriptCore prioriterer av samme grunn maksimal ytelse ved å oversette hele skriptet til bytecode, som kjøres hurtig og effektivt.
Men Microsoft har med Chakra, som er motoren i Edge, valgt å prioritere kort oppstartstid og lavere minnebruk. Denne tendensen har selskapet fortsatt med i den nyeste utgaven, skriver Limin Zhu, program manager for Chakra, i et blogginnlegg.
Les også: Microsoft ypper til strid om nettlesere og batteritid
Setter funksjoner på vent
Chakra gjør en «deferred» oversettelse til bytecode. Det vi si at den lager en rask analyse og venter med å oversette funksjonene som bare kanskje blir kalt. Tanken er at det dermed ikke brukes minne på bytecode til funksjoner som ikke blir brukt. Skriptet blir også raskere klart for kjøring.
Dette har Microsoft nå bygget ut med «re-deferring». Dette sørger for at en funksjon som er oversatt og brukt, men som ikke lenger brukes aktivt, kan blir ryddet opp. Da frigis bytecoden fra minnet og funksjonen vender tilbake til den løst analyserte statusen.
Ifølge Microsoft kan dette redusere minnebruken til en webapplikasjon med 6 til 12 prosent.
Les også: Microsoft lover raskere Node.js med ChakraCore
Ikke bare fordeler
Ulempen er at Chakra må avbalansere oppryddingen, for ellers vil det koste CPU-krefter hver gang den samme funksjonen skal oversettes til bytecode. Derfor sjekker Chakra med ujevne mellomrom om den aktuelle funksjonen har blitt kalt av skriptet.
Akkurat nå brukes metoden kun i forbindelse med visse funksjoner, men Microsoft jobber med å utvide dette i kommende oppdateringer.
Alle JavaScript-motorer bruker en Just-In-Time-kompilator (JIT) til å oversette fra JavaScript til mer effektiv bytecode. Men mens de øvrige motorene er optimalisert for raskt oversettelse av hele applikasjoner fra starten av, så oversetter Chakra altså litt om gangen. Det kan gjøre det vanskelig å sammenligne ytelsen til de ulike motorene, da de kan ha ulike styrker og svakheter, avhengig av bruksscenariene.
JavaScript er dessuten ikke lenger bare en konkurranseparameter mellom nettlesere, men også på serversiden. I fjor kom Microsoft med en åpen kildekode-versjon av Chakra, ChakraCore. Dette prosjektet gjør det mulig å bruke Chakra som motor i Node.js på samme måte som man kan med Googles V8.