Если Вы выбираете элемент в jQuery идентификатором, там все еще улучшение скорости путем предоставления ему контекста?

Вообразите эту упрощенную разметку:

<div id="header">
   <!-- Other things.... -->
   <div id="detail">

   </div>
</div>

и предположите, что у Вас уже есть этот код:

var $hdr = $("#header");

Есть ли любое различие в скорости для jQuery к "детали" поиска этот путь:

var $detail = $("#detail", $hdr);

по сравнению с

var $detail = $("#detail");

Так как деталь ищется идентификатором?

7
задан rahul 22 April 2010 в 12:57
поделиться

3 ответа

Нет, вам не нужно этого делать. Поскольку идентификатор уникален в документе, нет необходимости добавлять какие-либо другие оптимизации.

Я бы выбрал

var $detail = $("#detail");
7
ответ дан 6 December 2019 в 14:03
поделиться

Нет. Передача контекста фактически замедлит его работу. Соответствующий исходный код из jQuery приведен ниже с пояснениями.

Этот код в основном говорит:

  1. Если (селектор представляет собой строку HTML или идентификатор, И (либо это , а именно HTML, либо контекст отсутствует )) ) 1.a Затем сделайте что-нибудь вроде вызова document.getElementById ()
  2. В противном случае оцените контекст, а затем запустите селектор

И вот вырезанный исходный код ..

init: function( selector, context ) {
    ...
    if ( typeof selector === "string" ) {
        ...
        // This gets ignored because we passed a context
        // document.getElementById() isn't called directly
        if ( match && (match[1] || !context) ) {
            ...
            } else {
                elem = document.getElementById( match[2] );
                ...
            }
        ...
        // Either this gets executed if a jQuery wrapped context was passed
        } else if ( !context || context.jquery ) {
            return (context || rootjQuery).find( selector );
        }
        // Or this gets executed, if a simple selector was passed as context
        } else {
            return jQuery( context ).find( selector );
        }
    ...
}

match - это результирующий массив регулярного выражения , чтобы определить, является ли селектор либо строкой HTML , либо выражением id . Если это строка HTML, будет подставлено совпадение [1]. Если это идентификатор (#someId), тогда совпадение [2] будут заселены.

6
ответ дан 6 December 2019 в 14:03
поделиться

Ответ заключается в том, как хранятся идентификаторы. Присвоенные идентификаторы хранятся в хэш-подобной структуре данных. Если искать полностью определенный ID (не [id*="foo"]), то время поиска должно быть самым быстрым без каких-либо модификаторов, поскольку это прямой поиск по хэшу.

2
ответ дан 6 December 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: