Simplex: Geschwindigkeit von in Funktion gekapseltem Code in Firefox

Beitrag lesen

Hi,

mir ist da etwas aufgefallen, als ich ein Skript im Firefox (3.5/Win) getestet habe. Mein Code von folgender Form

  
function doSomething()  
{  
    //zeitintensive Operationen; z.B:  
    for(var k=0; k<30; k++)  
    {  
        foo.push(bar);  
        foo=(foo.join(",")+bar+","+bar).split(",");  
    }  
}  
  
for(var i=0; i<500; i++)  
    doSomething();  

läuft spürbar langsamer als selbiger Code umgeschrieben zu:

  
var foo=[], bar="a";  
	  
for(var i=0; i<500; i++)  
{  
    //zeitintensive Operationen; z.B:  
    for(var k=0; k<30; k++)  
    {  
        foo.push(bar);  
        foo=(foo.join(",")+bar+","+bar).split(",");  
    }  
}  

Die Geschwindigkeitseinbußen scheinen mit dem Umstand zusammenzuhängen, dass die „zeitintensiven Operationen“ innerhalb einer Funktion stehen. (bei obigem Code hält sich der Geschwindigkeitsunterschied noch sehr in Grenzen; bei meinem tatsächlichen – deutlich längeren – Code beträgt der Unterschied fast den Faktor 2)

Alles, was ich wissen wollte, ist: Hätte ich damit rechnen müssen, dass sich durch die Funktionsaufrufe die Laufzeit so sehr verschlechtert (oder kann ich der SpiderMonkey/TraceMonkey-Engine die Schuld dafür in die Schuhe schieben ;-) ?