Вообразите эту упрощенную разметку:
<div id="header">
<!-- Other things.... -->
<div id="detail">
</div>
</div>
и предположите, что у Вас уже есть этот код:
var $hdr = $("#header");
Есть ли любое различие в скорости для jQuery к "детали" поиска этот путь:
var $detail = $("#detail", $hdr);
по сравнению с
var $detail = $("#detail");
Так как деталь ищется идентификатором?
Нет, вам не нужно этого делать. Поскольку идентификатор уникален в документе, нет необходимости добавлять какие-либо другие оптимизации.
Я бы выбрал
var $detail = $("#detail");
Нет. Передача контекста фактически замедлит его работу. Соответствующий исходный код из jQuery приведен ниже с пояснениями.
Этот код в основном говорит:
И вот вырезанный исходный код ..
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]
будут заселены.
Ответ заключается в том, как хранятся идентификаторы. Присвоенные идентификаторы хранятся в хэш-подобной структуре данных. Если искать полностью определенный ID (не [id*="foo"]), то время поиска должно быть самым быстрым без каких-либо модификаторов, поскольку это прямой поиск по хэшу.