En av dem som dragit ett strå till den stacken under de senaste åren är Jan Kasper Martinsen. På måndag häftar han samman inte mindre än nio av sina forskningsartiklar till en doktorsavhandling där hanteringen av programtrådar i Javascript är den röda tråden: ”Design and Implementation of Thread-Level Speculation in JavaScript Engines”. Och då har han ändå valt bort ytterligare nio besläktade forskningsartiklar.
Ordet spekulation i avhandlingens titel innebär i sammanhanget att köra programkod innan man ens är säker på att den kommer att behövas.
Dagens mobilprocessorer har ofta flera kärnor – fyra stycken är inte alls ovanligt – som kan köra program parallellt. Att gå händelserna i förväg och exekvera framtida kodrader kan vara ett förträffligt alternativ till att rulla tummarna för kärnor som för tillfället saknar sysselsättning. Då finns resultaten senare klara direkt när de efterfrågas – en uppenbart prestandavinst.
En nackdel är att det kostar mycket minne. Men Jan Kasper Martinsen har flera förslag till lösningar av detta och andra problem. Dem kan du läsa mer om i avhandlingen, här (PDF, 11 Mbyte).
Hans slutsats blir att kombinationen av spekulativ exekvering, multitrådade processorer och just-in-time-kompilering (att översätta Javascript till maskinspråk allteftersom instruktionerna dyker upp snarare än hela programmet i förväg) både kan ge energivinst och prestandavinst om man gör det på rätt sätt. Han drar den slutsatsen efter att testat sina teorier på bland annat 15 verkliga webbtjänster och 20 demonstrationsprogram körda på 2, 4 eller 8 kärnor på en dator med två stycken fyrkärniga cpu:er och på en Sony Xperia Z1-mobil.
En av hans tidiga upptäckter var att den programvara som man brukade använda för att mäta prestanda på Javascript – så kallade benchmarks – ledde tankarna i fel riktning eftersom den skilde sig i kravbild från hur verkliga webbappar arbetar. Det fick som effekt att tidiga optimeringar av Javascript fick rakt motsatt effekt.
Allt detta – kompilering, spekulering, aktivering av kärnor – sker automatiskt bakom kulisserna och är inget app-utvecklaren behöver bekymra sig om. Avhandlingen riktar sig till dem som skapar operativsystem eller kompilatorer som kör Javascript, exempelvis till dem som konstruerar webbläsare.
Arbetet i avhandlingen har bland annat lett till en patentansökan som fick Sony Mobile Inventor Award i april 2014.