mmofacts.com

JavaScript Optimierung

gepostet vor 17 Jahre, 5 Monate von HSINC
na das ist ja mal interessant
gepostet vor 17 Jahre, 5 Monate von Agmemon
Richtig müsste es aber JScript Optimierung heißen, da das meiste nur für den IE zutrifft, wie den Kommentaren ja auch zu entnehmen ist.
gepostet vor 16 Jahre, 7 Monate von anthraxx
Hier eine gute JavaScript Performence Vorlesung aus dem YUI Threater.
Der Vortrag wird gehalten von Joseph Smarr (Plaxo Inc. - Chief Platform Architect)
Da ich den Vortrag sehr empfehlenswert halte, hier mal der link:
video.yahoo:

m4v:
http://video.yahoo.com/video/play?vid=1041101
m4v:
href="http://us.dl1.yimg.com/download.yahoo.com/dl/ydn/yui/theater/smarr-performance.m4v" target=_blank>
YUI" target="_blank">http://us.dl1.yimg.com/download.yahoo.com/dl/ydn/yui/theater/smarr-performance.m4v
YUI Threater:

Spoiler:
Joseph" target="_blank">http://developer.yahoo.com/yui/theater/
Spoiler:
Joseph Smarr is the Chief Platform Architect at Plaxo, Inc., where he's led the engineering of Plaxo's address-book integration application. In this talk, Smarr explores the core lessons that he and his Plaxo team have learned in the development of their apps and the details of how they've leveraged maximum performance from the web browser.
anthraxx
gepostet vor 16 Jahre, 5 Monate von KoMtuR
Gute Ansätze muss ich schon sagen, aber es bezieht sich immer alles auf Dom etc.
Aber es gibt ja nicht nur DOM-Zugriffe, sondern ich finde dies macht nur 50% aus. Meistens muss man noch Sachen berechen und diverse Dinge sortieren, kopieren etc.
Was mir gerade aufgefallen ist: Microsoft meint, dass man große Switches vermeiden soll. Andere Seiten meinen, dass man große if...else if...else vermeiden sollte. Also irgendwie ist das bißchen bizarr
Beispiele:
Test 1

var timeElapsed = 0;
var loops= 500;
for(var j = 0; j < loops; j++) {
var startPeriod = new Date().getTime();
for(var i = 0; i<10000; i++) {
var k = i/2;
}
timeElapsed += new Date().getTime() - startPeriod;
}
console.log(timeElapsed / loops);
Test 2

var timeElapsed = 0;
var loops= 500;
for(var j = 0; j < loops; j++) {
var startPeriod = new Date().getTime();
for(var i = 10000; i-->=0 {
var k = i/2;
}
timeElapsed += new Date().getTime() - startPeriod;
}
console.log(timeElapsed / loops);
Test 3

var timeElapsed = 0;
var loops= 500;
for(var j = 0; j < loops; j++) {
var startPeriod = new Date().getTime();
for(var i = 10000; i-->=0 {
var k = i>>1;
}
timeElapsed += new Date().getTime() - startPeriod;
}
console.log(timeElapsed / loops);
Test 4

var timeElapsed = 0;
var loops= 500;
for(var j = 0; j < loops; j++) {
var startPeriod = new Date().getTime();
var i = 10000;
do {
var k = i>>1;
}while(i--);
timeElapsed += new Date().getTime() - startPeriod;
}
console.log(timeElapsed / loops);
Test 5

var timeElapsed = 0;
var loops= 500;
for(var j = 0; j < loops; j++) {
var startPeriod = new Date().getTime();
var i = 10000;
do {
var k = i>>1;
k = (--i) >> 1;
}while(i-- >=0);
timeElapsed += new Date().getTime() - startPeriod;
}
console.log(timeElapsed / loops);
Ergebnisse:
Firefox
Test 1: 6.46 - Test 2: 6.228 - Test 3: 2.284 - Test 4: 1.802 - Test 5: 1.702
Opera
Test 1: 3.264 - Test 2: 3.184 - Test 3: 3.464 - Test 4: 3.026 - Test 5: 2.784
Internet Explorer 7
Test 1: 6.17 - Test 2: 4.928 - Test 3: 4.606 - Test 4: 4.126 - Test 5: 2.604
Webkit
Test 1: 3.244 - Test 2: 3.126 - Test 3: 2.744 - Test 4: 2.322 - Test 5: 2.022
Sicher sind diese Ergebnisse vom Computer und seinen Ressourcen abhängig, aber trotzdem sollte man die gleichen Unterschiede auf anderen System wiederfinden (Ok Firefox ging ja noch, aber beim IE sind die Ergebnisse mit Vorsicht zu behandeln, weil immer Scriptunterbrechungen drin sind durch die Sicherheitsabfrage...)
Somit würde die Art und Weise von Test 5 am "Besten laufen" (vorallem wenn man es noch weiter aufteilt), aber es leidet leider die Lesbarkeit drunter.
PS: Im Anhang mal die Test.html.
edit: Test 5 nochmal ein wenig optimiert

Auf diese Diskussion antworten