Делает ли jQuery кеширование "селекторов"? - PullRequest
54 голосов
/ 15 ноября 2008

Например, будет ли первый фрагмент кода выполнять полный поиск дважды или он достаточно умен, чтобы кэшировать результаты, если не произошло изменений в DOM?

if ($("#navbar .heading").text() > "") {
  $("#navbar .heading").hide();
}

и

var $heading = $("#navbar .heading");

if ($heading.text() > "") {
  $heading.hide();
}

Если селектор более сложный, я могу представить, что это нетривиальный удар.

Ответы [ 14 ]

1 голос
/ 24 мая 2016
1 голос
/ 02 июля 2015

jsPerf сегодня не работает, но эта статья предполагает, что прирост производительности от кэширования селекторов jQuery будет минимальным.

enter image description here

Это может быть связано только с кэшированием в браузере. Проверенный селектор был только одним идентификатором. Необходимо провести больше тестов для более сложных селекторов и различных структур страниц ...

1 голос
/ 04 декабря 2012

jQuery Sizzle автоматически кэширует последние функции, которые были созданы из селекторов, чтобы найти элементы DOM. Однако сами элементы не кэшируются.

Кроме того, Sizzle поддерживает кэш последних скомпилированных функций. Кэш имеет максимальный размер (который может быть изменен, но имеет значение по умолчанию), поэтому вы не получите ошибок нехватки памяти при использовании большого количества различных селекторов.

0 голосов
/ 25 мая 2015

Проверьте, помогает ли это https://plugins.jquery.com/cache/

натолкнулся на это как часть нашего обычного проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...