Использует ли $ ("body") Sizzle Engine? - PullRequest
4 голосов
/ 09 декабря 2010

Я понимаю, что $("#id") быстрее, потому что он отображается на собственный метод javascript.То же самое относится к $("body")?

Ответы [ 2 ]

10 голосов
/ 09 декабря 2010

Нет, он не использует Sizzle, есть специальный ярлык для $("body"), , вы можете увидеть код здесь :

    // 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;
    }

Обратите внимание, что это не совсем , как $(document.body), так как результирующий контекст $("body") равен document, где $(document.body) (как и любой другой узел DOM) имеет контекст самого себя.

6 голосов
/ 09 декабря 2010

Это прямо из источника (код) :

if ( selector === "body" && !context && document.body ) {
    this.context = document;
    this[0] = document.body;
    this.selector = "body";
    this.length = 1;
    return this;
}

Для тегов, отличных от body

Если вы немного копаетеглубже оказывается, что они будут использовать getElementsByTagName, если не задан контекст.Это даст хороший прирост производительности по сравнению с использованием движка Sizzle.

// 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, $(...))
}
...