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 ;-) ?