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