jQuery Leistungsunterschied ohne "jeder"

9

Update Added jsfiddle - siehe unten im Beitrag

Ich habe derzeit eine Funktion, die alle deaktivierten Felder auf dem Bildschirm wieder aktiviert. Während es ziemlich schnell läuft (& lt; 1ms gemäß Firebug profiler), bin ich dabei, das gesamte Javascript in meinen Bildschirmen aufzuräumen und dachte, dass diese spezielle Funktion etwas überflüssig zu sein scheint:

%Vor%

Ich hatte den Eindruck, dass diese drei Zeilen wie folgt ersetzt werden könnten, und ich erwartete, wenn nicht besser als mindestens gleich Leistung.

%Vor%

Anscheinend liege ich falsch. Der erste führt viel besser und ich verstehe nicht ganz warum. Selbst das Hinzufügen zusätzlicher Selektoren wie: Eingabe macht keinen Unterschied (und macht es sogar noch schlimmer).

Kann jemand meine Verwirrung klären? Danke.

Bearbeiten Ich sollte hinzufügen, dass wir eine alte Version von jQuery verwenden - 1.3.1 glaube ich.

Edit2 Hier sind einige jsFiddle Links. Bitte denken Sie daran, dass ich Firebugs Profiler falsch interpretiere ( was meiner Meinung nach der Fall ist ).

Option 1: Ссылка

Option 2: Ссылка

    
Ben J 15.12.2010, 23:43
quelle

1 Antwort

4

In jQuery 1.3.1 ist dies etwas anders als in den aktuellen Versionen implementiert:

v1.4.4

%Vor%

v1.3.1

%Vor%

Die Funktionalität ist mehr oder weniger die gleiche, beide verwenden .each() in allen Fällen, um die Liste zu bearbeiten. Die Definition von jedem hat sich überhaupt nicht grundlegend geändert:

%Vor%

Also nur eine Schleife mit .call() viel.

Ich denke, die einzige Erklärung für eine Geschwindigkeitssteigerung mit einer zusätzlichen äußeren .each() -Schleife wäre, dass die Datenstrukturgröße auf ein einzelnes Element reduziert wird, bevor sie vorhanden ist über viele Ebenen von Aufrufen weitergeleitet, wodurch wahrscheinlich lokale Datenkopien auf jeder Ebene erstellt werden. Wenn die gesamte Liste übergeben wird, um so viel mehr Overhead zu erzeugen, müsste die Heap-Verwendung profiliert werden.

    
Orbling 16.12.2010, 01:04
quelle

Tags und Links