2012-12-17 7 views
6

Ich oft $(this) innerhalb jQuery Event-Handler und nie zwischenspeichern. Wenn ich das tun würde

und Variable statt des Konstruktors verwenden, wird mein Code irgendeine signifikante zusätzliche Leistung erhalten?


JS Perf Test, um den Performance-Gewinn von dieser Optimierung zu messen: http://jsperf.com/jquery-this-caching

+0

Das hängt davon ab, wie oft es verwendet wird. '$ (this)' konstruiert ein neues jQuery-Objekt und alles, was dazu gehört. Wenn Sie '$ (this)' 'mehr als einmal in einem Codeblock verwenden, sollten Sie es im Cache speichern. Vor allem, wenn Sie es in einer Schleife tun. – Shmiddty

+1

Es wird immer schneller sein, '$ (this)' in einem var zu cachen. Es ist Mikro-Optimierung, um sicher zu sein. Sie müssen auf jeden Fall alle Selektoren cachen, denn das hat viel größere Auswirkungen. –

+0

Wenn Sie es innerhalb desselben Aufrufstapels 100 Mal auswerten, erhalten Sie möglicherweise eine 1 oder 2 Millisekunden langsamere Ausführung. –

Antwort

9

A klitzekleine miniscule unmerklich ein, ja. Von Bedeutung?

Jedes Mal, wenn Sie $(this) tun, führt dies zu mehreren Funktionsaufrufen und ein paar Speicherzuweisungen. Die Funktionsaufrufe sind weder hier noch dort (sogar auf IE6, war ich surprised to learn), aber die Speicherabwanderung könnte auf Browsern, die Speicherverwaltung nicht gut behandeln, summieren. Die meisten modernen tun es.

Ich speichere das Ergebnis immer in eine Variable, weil ich einfach nicht gerne Funktionen aufrufen und Objekte unnötig zuweisen möchte. Und es spart das Tippen dieser Parens. :-)

+2

Ich habe nur die gleiche Regel, die ich in allen meinen anderen Programmierung tun. Wenn ich die gleiche Funktion mehr als einmal innerhalb einer Funktion anrufe, cache ich das Ergebnis, so dass ich es nicht mehr als einmal aufrufen muss. '$()' ist ein Funktionsaufruf. Benutze das als Richtlinie für 30 Jahre. – jfriend00

+0

@ jfriend00: Ja, ich auch (und eine überraschend ähnliche Zeitspanne ...). –

3

Ja, denn jedes Mal, wenn Sie $(this) machen, erstellen Sie ein neues jquery-Objekt.
Aber Sie werden keine signifikante Leistung erhalten, nur wenn Sie es mehr als 1000x tun

Und es ist eine gute Praxis, Objekte mehr als einmal zu cachen.

Verwandte Themen