Examensarbete utfört av Fredrik Smedberg Presentationens upplägg • Vad är JavaScript? • Varför är språket viktigt? • Historisk utveckling • Min frågeställning • Avgränsningar • Metod • Resultat • Slutsats • Frågor? 2 av 22 Vad är JavaScript? – Språkets födelse • Netscape anställde Brendan Eich, 1995 • Mocha -> LiveScript -> JavaScript • Microsoft JScript, Internet Explorer 3 • ECMAScript • AJAX o Gmail o Hitta.se 3 av 22 Vad är JavaScript? – Design • Multi-paradigm o Prototype-baserat (avsaknad av klasser) o Imperativt o Funktionellt o Scriptspråk • Dynamiskt • Likheter med o C (syntaxen) o Self och Scheme (designprinciper) o Men även Java, Perl och Python 4 av 22 Vad är JavaScript? – Design • Körs i virtuell maskin • Utseende /* Finds the lowest common multiple of two numbers */ function LCMCalculator(x, y) { // constructor function function checkInt(x) { // inner function // exception throwing } if (x % 1 != 0) throw new TypeError(x + " is not an integer"); return x; // semicolons are optional (but beware since this may cause // consecutive lines to be erroneously treated as a single // statement) } this.a = checkInt(x) this.b = checkInt(y) 5 av 22 Varför är språket viktigt? • Ökad användning • Internet har spridit sig 6 av 22 Varför är språket viktigt? • Adobes Flash (ej standard) • Suns (Oracles) Java (halvstandard) • Microsofts Silverlight (ej standard) • HTML5 (blivande standard) 7 av 22 Historisk utveckling 8 av 22 Min frågeställning • Har prestandan påverkats? • Har koden blivit lättare att förstå? o Rader kod o Återanvändbarhet o Minnesläckor • Vilka utvecklingsverktyg finns och hur påverkas de utvecklingen? • Var och när är det motiverat att använda JavaScript? • Hur ofta används den kod jag skrivit om? 9 av 22 Avgränsningar • Vad tittade jag på? o Hur prestandan påverkas o Mängd kod och hur den påverkar läsbarheten o Minnesläckor o Portabilitet och återanvändbarhet o Översiktlig genomgång av utvecklingsverktyg o Hur ofta skriven kod används • Endast C++ och JavaScript jämfördes • Exempel på vad jag inte tittade på 10 av 22 Metod • Litteratur och akademiska papper • Identifierade lämpliga uppgifter att implementera o GIF-dekoder o XML-parser o Elementära tester • JPEG-encoder • Industriella benchmarks 11 av 22 Metod – GIF-dekoder • Vad är en GIF-dekoder? • En C++-version, fyra versioner skrivna i JavaScript • Svårigheten med att implementera en GIF-dekoder i JavaScript • Varför GIF-dekoder? 12 av 22 Metod – GIF-dekoder • Dekoderns olika steg Rå data Header Färgtabell LZWblock 13 av 22 Metod – XML-parser • Dekoda en slags XML • C++-dekoder • JavaScript-dekoder baserad på C++-versionen • Skrev ny JavaScript-dekoder baserad på regular expressions • Varför XML-parser? 14 av 22 Metod – Elementära tester • Varför elementära tester? • Exempel o Hashalgoritmer o Sortering o Matrisberäkningar o Funktionsanrop o Nästlade loopar o Strängkonkatenering 15 av 22 Resultat – GIF-dekoder 16 av 22 Resultat – Minnesanvändning 17 av 22 Resultat – XML-parser 18 av 22 Resultat – JPEG-encoder 19 av 22 Resultat – Annat • Rader kod? • Responsivitet? • Industriella benchmarks? • Internet Explorer? 20 av 22 Slutsats • JavaScript är snabbt! • Det går skapa de flesta program med fullgod prestanda • En stor nackdel är minnesförbrukningen • En kod kan köras på många platformar • Kräver mindre rader kod • Internet Explorer är en stor flaskhals • Utvecklingsverktyg? 21 av 22 Frågor? 22 av 22