setTimeout für Objektmethode - ES5 bind, oder closure?

8

Nehmen wir an, ich mache einige Animationen mit dem HTML5 Canvas. Wenn ich versuche, die Methode eines Objekts zu animieren, was in Bezug auf die Leistung vorzuziehen wäre (vorausgesetzt, IE8 interessiert mich nicht):

%Vor%

oder

%Vor%

Mein spezieller Fall ist nicht intensiv genug, um wirklich einen Unterschied visuell zu machen; Ich versuche nur, die beste Praxis herauszufinden.

Ich würde denken, dass das Erstellen einer neuen Funktion mit bind weniger Overhead hätte als das Erstellen einer Closure, aber ich wollte die Experten fragen.

    
Adam Rackis 19.01.2012, 15:40
quelle

1 Antwort

5

JavaScript-Leistungsfragen sind knifflig, weil die verschiedenen Engines da draußen sehr unterschiedliche Leistungsmerkmale haben. Was bei einer Engine schnell ist, ist bei einer anderen langsam.

Ihre Schließung sollte in der Tat sehr schnell sein; Schließlich sind alle Funktionen closures und Ihre Variable self ist im Kontext definiert, der sofort enthält (es gibt also nicht viel durch die Scope-Kette).

Aber in der Theorie könnte eine Engine, die ES5-Funktionen nativ unterstützt, optimieren, wie bind funktioniert, wodurch sie sogar noch schneller wird (es ist nicht einmal die Suche nach einer Bereichs-Kette erforderlich).

Spielt es eine Rolle? Nein. Ich würde verwenden, was für Sie Sinn macht. Beachten Sie, dass IE8 nicht der einzige Browser ist, der ES5-Funktionen noch nicht nativ hat (obwohl Sie immer einen der es5-Shims verwenden können.% Co_de% kann im Gegensatz zu einigen ES5-Features durch Shims in ES3-Code perfekt emuliert werden) obwohl sie es tun müssen, müssen sie bind / call verwenden, was langsamer als eine Schließung bei einigen Engines sein kann.

    
T.J. Crowder 19.01.2012, 15:45
quelle

Tags und Links