Что я хочу сделать:Сгруппировать все похожие элементы на странице (определенного вида)в объект, который я могу позже повторить --или применять радикальные изменения к каждому элементу внутри.
Мой код успешно справляется с поставленной задачей, но когда количество элементов увеличивается до 200-300+, производительность резко падает, и пользователи это замечают. Я изолировал проблемные строки кода и хочу знать, есть ли другой способ решения той же проблемы.
Функция add()кажется проблемной операцией из-за таймеров, которые я разместил вокруг них. Сначала время, необходимое для выполнения операции, составляет 0,001, но растет, пока количество элементов не достигнет 300, и для каждого дополнительного элемента требуется ~.1 секунды И продолжает замедляться.
Я изучил(и другие)возможности повышения производительности jQuery и реализовал некоторые из них (, а именно 3), но они не дали мне никакого существенного увеличения производительности. Удивительно, но этот код работает за 1 секунду (! )для Firefox (300+ вызовов для добавления())в то время как Chrome и IE занимают примерно в 10-20 раз больше или больше...
Вот мой код:
rowsToChange = $([]);
// Grab all the ids greater than whichever one I'm currently looking at:
var arr = $.makeArray($("[id^=stackLocatorLinkFillUp]:gt("+(uniqueID-1)+")"));
for (var i=0; i>>
startTimer = new Date().getTime();
// **************************
// PROBLEMATIC LINE FOLLOWS when 200+ records:
rowsToChange = rowsToChange.add($this);
// Grows from.001 to.1xx after 300 iterations
console.log("innertiming:"+(new Date().getTime() - startTimer)/1000);
// **************************
}
Конечный результат выглядит так (через Chrome Inspector):
[itemType=BOUND&ccLocale=PERIODICAL,
itemType=BOUND&ccLocale=PERIODICAL,
...
]
В итоге я обрабатываю все это следующим образом (что мне нравится за простоту!):
var superlink = "...new goodness to display for all elements...";
rowsToChange.html(superlink).css("display","block");
Похоже, это может быть допустимым решением.(Другой метод добавления?)но я бы предпочел бы продолжать собирать список объектов вместе, чтобы последняя строка могла творить чудеса.
(am not i am указал, что следующее неверно --в отношении конкатенации;спасибо 'am not I am')
Похоже, что операция add()должна объединять строки, так как это кажется одной из основных проблем, с которыми сталкиваются другие. Но преобразование моего оператора add()в += не похоже на работу.
Спасибо за проверку;
Хром:18.0.1025.142 м Firefox:11.0 IE:8.0.7600.16385