Warum ist das Aufrufen einer Funktion ohne ihren Besitzer langsamer?

8

Wenn ich Folgendes tue:

  

var abs = Math.abs;

Shoudnot abs(-10) ist schneller als Math.abs(-10) ? Weil ABS direkt aufgerufen wird.

Das hat meine Aufmerksamkeit erregt: Math.abs vs benutzerdefinierte ABS-Funktion

Aktualisierung:

Der gleiche Test im Internet Explorer 11 zeigt ein völlig anderes Ergebnis:

Ich würde spekulieren, dass dies auf einige Optimierungen der integrierten Funktionen in Chrome V8 Engine zurückzuführen ist.

Ein Test, der von nnnnnn erstellt wurde und verdeutlicht, was ich sagen möchte: Eigenschaftsverknüpfung

    
wm1sr 30.11.2013, 14:39
quelle

1 Antwort

3

Diese Antwort wurde von Givi nutzlos gemacht. Siehe Kommentare.

Das Suchen nach einer benutzerdefinierten Funktion in einem benutzerdefinierten Objekt ist langsamer als das Nachschlagen einer Funktion, die an eine lokale Variable gebunden ist, so dass Sie größtenteils Recht hatten.

Allerdings ist das Nachschlagen von Math.* -Funktionen schneller, höchstwahrscheinlich wegen der internen Optimierungen der V8-Engine (also ist das "Caching" von eingebauten Funktionen in einer lokalen Variable tatsächlich langsamer, während "benutzerdefinierte Funktionen" zwischengespeichert werden) schneller).

Bearbeiten: hier ist ein Jsperf , der zeigt, wie Math.* -Funktionen schneller sind als ihre var x = Math.x Gegenstücke, während das Gleiche für benutzerdefinierte Funktion nicht tut. So funktioniert V8 imho.

Edit # 2: Gerade jetzt habe ich diese Zeile von Ihrer Frage bemerkt:

  

Ich würde spekulieren, dass dies auf einige integrierte Optimierungen zurückzuführen ist   Funktionen in Chrome V8-Engine.

Ich bin mir nicht 100% sicher, aber es sieht definitiv so aus, ja.

    
Mtz 02.12.2013 08:44
quelle

Tags und Links