我有一个全局数组,其中包含我目前正在使用的元素的ID。每一秒我都会运行一个例程来处理这些元素。
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 :(得分:2)
你不会看到任何值得注意的性能增长,但这只是一个好习惯 - 不要两次请求这个东西,只要你能在保留某个地方就这样做。
所以我的最后建议是:只使用jquery对象数组一次缓存jquery对象
答案 1 :(得分:1)
你会稍微改进一下,因为你正在将一些工作移出循环而只进行一次。
虽然只有三件物品而且很少每秒一次你几乎不会注意到它们之间的区别。通过id定位元素相当容易,因为浏览器有一个专门用于此的方法,并且创建jQuery对象也不是那么多。
答案 2 :(得分: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") ];
这样可以节省一些函数调用。