我想做的是:将页面上所有相同类型的元素分组到一个对象中,以便稍后进行迭代或对每个元素应用全局更改。
我的代码可以成功完成所需任务,但当元素数量增加到200-300+时,性能急剧下降,用户已经注意到。我已经确定了有问题的代码行,并想知道是否有另一种解决方法。
根据我放置的计时器,add()函数似乎是有问题的操作。起初,执行该操作所需的时间为0.001秒,但随着元素数量达到300,它需要每增加一个元素就需要约0.1秒,并且继续变慢。
我已经研究了jQuery的性能增强能力(以及其他),并且实施了其中的一些(即3个),但它们没有给我带来任何有意义的性能提升。令人惊讶的是,这段代码在Firefox中的执行时间仅为1秒(对add()函数调用300+次),而Chrome和IE则需要10-20倍甚至更长时间……
最终结果看起来像这样(通过Chrome检查器):
最终,我按照以下方式处理所有这些内容(我喜欢这种简单易行的方式!):
这看起来可能是一个有效的解决方案(不同的添加方法?),但我更喜欢继续将对象列表聚集在一起,以便最后一行可以发挥其魔力。
(am not i am指出以下内容不正确--关于连接; 感谢'am not i am')
似乎add()操作必须连接字符串,因为这似乎是其他人面临的主要问题之一。但将我的add()语句转换为+=似乎不起作用。
感谢您查看;
Chrome:18.0.1025.142 m Firefox:11.0 IE:8.0.7600.16385
我的代码可以成功完成所需任务,但当元素数量增加到200-300+时,性能急剧下降,用户已经注意到。我已经确定了有问题的代码行,并想知道是否有另一种解决方法。
根据我放置的计时器,add()函数似乎是有问题的操作。起初,执行该操作所需的时间为0.001秒,但随着元素数量达到300,它需要每增加一个元素就需要约0.1秒,并且继续变慢。
我已经研究了jQuery的性能增强能力(以及其他),并且实施了其中的一些(即3个),但它们没有给我带来任何有意义的性能提升。令人惊讶的是,这段代码在Firefox中的执行时间仅为1秒(对add()函数调用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<arr.length; i++) {
$this = arr[i];
// <<< VARIOUS CONDITIONALS that make this as selective as possible REMOVED >>>
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检查器):
[<div style="display:none" id="stackLocatorLinkFillUp1">itemType=BOUND&ccLocale=PERIODICAL</div>,
<div style="display:none" id="stackLocatorLinkFillUp2">itemType=BOUND&ccLocale=PERIODICAL</div>,
...
]
最终,我按照以下方式处理所有这些内容(我喜欢这种简单易行的方式!):
var superlink = "...new <a> goodness to display for all elements...";
rowsToChange.html(superlink).css("display","block");
这看起来可能是一个有效的解决方案(不同的添加方法?),但我更喜欢继续将对象列表聚集在一起,以便最后一行可以发挥其魔力。
(am not i am指出以下内容不正确--关于连接; 感谢'am not i am')
似乎add()操作必须连接字符串,因为这似乎是其他人面临的主要问题之一。但将我的add()语句转换为+=似乎不起作用。
感谢您查看;
Chrome:18.0.1025.142 m Firefox:11.0 IE:8.0.7600.16385
.add()
方法绝对不会将字符串连接起来。DOM 不是字符串。您可能想看一下.pushStack()
。 - user1106925