Frage

Dies ist eine zufällige Frage, aber ich habe mich gefragt, warum ein benannter Rückruf für ein Klickereignis im Vergleich zu einer anonymen Funktion schlechter abschneidet.

Hier ist der Link zur JSPERF Tests, die ich in Firefox und Chrom auf Mac durchgeführt habe.

Ich denke, meine Annahme war, dass benannte Callbacks immer besser abschneiden würden. Zum Beispiel bei der Verwendung .each der benannte Rückruf ist etwas schneller.

Vielen Dank für Ihre Zeit!

Bearbeiten Ich habe das bearbeitet .each JSPERF -Test, weil (a) ich nicht getestet habe, was ich meinte und (b) ich bin versuchen Ereignisse mehr nachzuahmen.

Bearbeiten 2 Mein Test -Setup war von Anfang an falsch, wie @Esailija unten darauf hinweist. Diese Frage ist etwas sinnlos, aber zumindest könnte sie jemandem mit JSPERF -Tests helfen.

War es hilfreich?

Lösung

Der JSPERF ist kaputt, weil Sie Ereignishandler über Testgrenzen hinweg ansammeln. In anderen WRODs wird der Test, der zuerst durchgeführt wird, der "schnellste" sein.

Und die gesamte Prämisse des Tests ist lächerlich, es gibt keinen Unterschied zwischen einer Funktion, die einen Namen hat, und einer Funktion, die keinen Namen hat, wenn alles andere gleich ist. Sie werden nur einen Unterschied sehen, wenn Sie JSPERF falsch einrichten. Wenn Sie ständig gleiche Ergebnisse für sie erzielen, wissen Sie, dass Sie es richtig eingerichtet haben - aber Sie würden dies bereits aus dem gesunden Menschenverstand wissen :)

Andere Tipps

Die anonyme Funktion wird als Argument übergeben. Um ihre Referenz zu lösen, erreicht die Scope -Kette nicht bis zur übergeordneten Funktion zurück, die sie erstellt hat - sie existiert nur als Argument. Um den Verweis auf die benannte Funktion aufzulösen, wird die Zielfernrohrkette hingegen bis zum Schließen der übergeordneten Funktionen befolgt, in dem die benannte Funktion erstellt wurde.

Bearbeiten:Ich habe versucht, dies zu beweisen, aber es scheint, als würde die anonyme Funktion nicht schneller gelöst - http://jsperf.com/scope-chain-anonymous-function

Bearbeiten: Wenn Sie anrufen a.off(); Um Ereignishandler zu entfernen, ist die benannte Funktion genauso schnell oder schneller als die Lösung der anonymen Funktion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top