2013-06-05 7 views
7

ich die Unterschiede zwischen zwei ID-Selektoren getestet, die erste ist normal: $('#lol') Und das zweite ist das gleiche, aber zwischen mehreren Klammern gesetzt: $((((('#lol')))))jQuery-Selektor Leistung: ein merkwürdiger Fall

ich einen Test auf jsperf ins Leben gerufen, mit Firefox und Chrom. Ergebnisse sind interessant: Mit Firefox, der erste (normale Selektor) ist 40% langsamer (!!!). Mit Chrom ist der zweite um 0,84% langsamer.

Warum so ein Unterschied? Kann jemand das erklären?

Ist jsperf.com zuverlässig?

können Sie den Test hier sehen:

http://jsperf.com/ghshshsrd

ich auf anderen Browsern testen, zum Spaß.

(Edit: ich bin auf Mac OS X, by the way)

+0

Auch getestet mit Oper und Safari, keine echten Unterschiede. Nur Firefox hat dieses seltsame Ergebnis – FLX

+1

nicht, wenn Sie den Test von Firefox browswer ausführen, für mich beide sind ähnlich –

+0

Ich denke, das projizierte Ergebnis in der Grafik ist der Schuldige –

Antwort

2

Wie andere haben darauf hingewiesen, die Unterschiede zwischen den Ergebnissen für die beiden Aussagen erhalten vernachlässigbar. Selbst wenn testing the same statement twice, ist es sehr unwahrscheinlich, dass Sie zwei identische Ops/sec-Werte erhalten.

Auch bemerkt, Sie sagten "ein Test", nicht "mehrere Tests". Wenn das Ergebnis merkwürdig erscheint, wiederholen Sie einfach den Test - vergessen Sie nicht, dass anormale Ergebnisse auftreten können, wenn Ihr Browser während eines Testlaufs keine Ressourcen mehr hat.

JSPerf war immer zuverlässig für mich - genug, um für die Demonstration von Optimierungstechniken nützlich zu sein (this being a classic example).

0

Tatsächlich gibt es keinen wirklichen Unterschied zwischen den beiden Möglichkeiten, ein Element auszuwählen (außer der Lesbarkeit). Ich hat einen neuen jsperf Testfall, die mehr objektiv den Fall misst:

->http://jsperf.com/jquery-selector-performance-20130730

Warum Ihr Test-Ergebnis ist so seltsam? Es ist wahrscheinlicher, dass Ihr Testszenario ungenauer ist als irgendein tatsächlicher Leistungsunterschied zwischen beiden Tests.

Sie können die Testreihenfolge Ihres Ersttests umkehren: Überprüfen Sie zuerst den Code $(((('#lol')))) und danach $('#lol'). Ich bin ziemlich sicher, dass Sie das genaue Gegenteil Ihres aktuellen Tests bekommen ;-)

Ich bin kein Experte auf diesem, aber zum Teil sind die Browser heute sehr intelligent und werden JavaScript-Code/Variablen zwischenspeichern . Eventuell speichert jQuery den Wert auch nach dem ersten Aufruf.