Производительность массива объектов jQuery - PullRequest
1 голос
/ 02 февраля 2012

У меня есть глобальный массив, содержащий идентификаторы элементов, с которыми я сейчас работаю.Каждую секунду я запускаю подпрограмму, которая работает с этими элементами.

var ids = ['abc', 'def', 'zyx']

// the following code happens every second
for (var i = 0; i < ids.length; i++) {
  el = $("#" + ids[i])
  // do stuff with el
}

Мой вопрос: пострадает ли я заметное снижение производительности или улучшение, чтобы сделать следующее:

var ids = []
ids.push($("#abc"))
ids.push($("#def"))
ids.push($("#zyx"))

for (var i = 0; i < ids.length; i++) {
  el = ids[i]
  // do stuff with el
}

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Вы не увидите какого-либо заметного роста производительности, но это просто хорошая привычка - не запрашивать вещь дважды, если вы можете сделать это только один раз, где-то хранить.

Итак, мой последний совет: кэшируйте объекты jquery только один раз и после этого работайте с массивом объектов jquery

1 голос
/ 02 февраля 2012

Вы получите небольшое улучшение, поскольку вы выводите какую-то работу из цикла и выполняете ее только один раз.

Только для трех предметов и редко, как раз в секунду, вы вряд ли заметите разницу. Найти элемент по идентификатору довольно просто, поскольку в браузере есть специальный метод для этого, и создание объекта jQuery тоже не такая большая работа.

0 голосов
/ 02 февраля 2012

Вам не нужно угадывать - почему бы не создать тестовый пример jsPerf ?

Во всяком случае, это изменение значительно улучшит производительность. Нет причин постоянно восстанавливать объекты jQuery для одних и тех же элементов.

Мой совет: храните вещи СУХОЙ - кэшируйте все, что можно использовать повторно .

Также обратите внимание, что вместо:

var ids = [];
ids.push($("#abc"));
ids.push($("#def"));
ids.push($("#zyx"));

Вы могли бы просто сделать:

var ids = [ $("#abc"), $("#def"), $("#zyx") ];

Это сохраняет несколько вызовов функций.

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