Ich verstehe, dass $("#id")
schneller ist, da es eine native JavaScript-Methode zugeordnet ist. Gilt das gleiche für $("body")
?
Antwort
Nein, es nicht Sizzle nicht verwendet, gibt es eine spezielle Abkürzung für $("body")
vorhanden, you can see the code here:
// The body element only exists once, optimize finding it
if (selector === "body" && !context && document.body) {
this.context = document;
this[0] = document.body;
this.selector = "body";
this.length = 1;
return this;
}
Beachten Sie, dass dies nicht ist ziemlich die gleiche wie $(document.body)
, wie der resultierende Kontext $("body")
ist document
, wobei $(document.body)
(wie jeder andere DOM-Knoten) einen Kontext für sich hat.
Dies ist direkt aus dem source (code):
if (selector === "body" && !context && document.body) {
this.context = document;
this[0] = document.body;
this.selector = "body";
this.length = 1;
return this;
}
Für andere Tags als Körper
Wenn Sie ein wenig tiefer graben sich herausstellt, werden sie getElementsByTagName
verwenden, wenn kein Zusammenhang gegeben ist. Dies wird der Leistung gegenüber der Sizzle-Engine einen deutlichen Schub verleihen.
// HANDLE: $("TAG")
} else if (!context && !rnonword.test(selector)) {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName(selector);
return jQuery.merge(this, selector);
// HANDLE: $(expr, $(...))
}
** Whoa. ** jQuery hat sicher einige nette Tricks im Ärmel. – BoltClock
@BoltClock - Es ist eigentlich eine ziemlich logische Optimierung. – ChaosPandion
@ChaosPandion - Ihre aktualisierte Antwort ist falsch, die erste Version wird ausgeführt, wenn kein Kontext angegeben wird, vorausgesetzt, dass '
' vorhanden ist (es wäre auf 'document.ready'). –
Verwendet es Sizzle für $ ("body.class")? Sollte ich konsequent $ ("body") verwenden filter (". Class") ... oder so? – Matrym
@Matrym - Neuere Browser sind egal, sie verwenden native Selector-Methoden wie 'querySelectorAll()'. Aber um direkt zu antworten, wird kein '$ (" body.class ")' oder irgendeine Variante * außer * '$ (" body ")' nicht speziell behandelt, also wird es an die Selektor-Engine ausgegeben. –