2012-02-02 5 views
1

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

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 
} 

ответ

0

Вам не обязательно гадать - почему бы и нет create a jsPerf test case?

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

Мой совет: keep things DRY — cache everything that can be reused.

Также отметим, что вместо того, чтобы:

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

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

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

Это экономит несколько вызовов функций.

+0

Спасибо, что я не был уверен в том, что накладные расходы на хранение объектов jquery в массиве. –

+0

-1 Я должен сфокусировать это, потому что это определенно не улучшит производительность * сильно *. Существует улучшение, и это стоит делать, но в лучшем случае это пока только мало. – Guffa

+1

Хорошо, я понимаю, может быть, не очень, но, похоже, это предпочтительный метод. Плюс я не знал о jsPerf, поэтому я нашел его полезным ответом. –

2

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

Так что мой последний совет: кэшировать объекты JQuery только один раз и после этого работы с массивом JQuery объектов

1

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

Всего три элемента и редко, как раз в секунду, вы вряд ли заметите разницу. Локализация элемента по id довольно проста, так как браузер имеет специально для этого метод, и создание объекта jQuery также не так много.

+0

Несомненно, это может быть целых 20 или около того. Каждый бит помогает, когда мы не можем контролировать оборудование клиента! –

+0

@JeffV: Даже для целых 20 это не будет большой работой. Недавний браузер на приличном компьютере мог делать это примерно 1000 раз в секунду. Я сделал тест производительности, который показывает, что разница не очень большая. http://jsperf.com/precreate-jquery-objects – Guffa

Смежные вопросы