jQuery:повысить()производительность; Есть ли способ лучше?

Что я хочу сделать:Сгруппировать все похожие элементы на странице (определенного вида)в объект, который я могу позже повторить --или применять радикальные изменения к каждому элементу внутри.

Мой код успешно справляется с поставленной задачей, но когда количество элементов увеличивается до 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

5
задан Community 23 May 2017 в 10:34
поделиться