Ich laufe in ein Performance-Problem mit einem seltsamen Verhalten von Javascript innerhalb meiner Firefox (13.0.1). Der neueste Chrome zeigt das gleiche Verhalten.
Wenn ich meinen Javascript-Code ausführe, der wie folgt aussieht Code-Schnipsel aussieht, ist das Ergebnis ziemlich langsam. Ich erhalte jedoch eine etwa 10-fache Beschleunigung, wenn ich einfach den Inhalt der äußeren Schleife über 'j' einfüge. Für meine Beispielanwendung bedeutet dies, dass ich einfach zwei Mal für die festen Werte 'j=0' und 'j=1' schreiben, da 'm' gleich 2 ist. Natürlich will ich nicht, dass 'm' hart kodiert sein, also frage ich mich, was genau diese Verlangsamung verursacht, wenn eine echte Schleife verwendet?
Hat jemand eine Idee?
Ich führe den Code innerhalb eines Web Workers aus. Seltsamerweise tritt der positive Effekt des Inlinings nicht auf, wenn ich denselben im Haupt-Javascript-Kontext statt im Kontext des Workers ausführe. Dennoch, die Ausführung der Schleife Inhalt nur für einen Wert von 'j' bringt die enorme Beschleunigung hilft in allen Fällen. Könnte dies auch etwas mit der Speicherverwaltung zu tun haben?
Vielen Dank im Voraus!
//m: very small, 1-2
for (j = 0; j < m; ++j) {
var attrib = attributes[j];
//n: very large, ~3*10^6 elements
for (i = 0; i < n; ++i) {
var data = largeBuffer[i];
//nc: very small, 2-3
for (c = 0; c < nc; ++c) {
var component;
//compute 'component
//..
attrib.typedArray[baseIdx + c] |= component;
}
baseIdx += nc;
}
}