Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery对象数组的性能_Jquery_Performance - Fatal编程技术网

jQuery对象数组的性能

jQuery对象数组的性能,jquery,performance,Jquery,Performance,我有一个全局数组,其中包含我当前使用的元素的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 id=['abc','def','zyx'] //下面的代码每秒发生一

我有一个全局数组,其中包含我当前使用的元素的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 id=['abc','def','zyx']
//下面的代码每秒发生一次
对于(变量i=0;i
我的问题:如果执行以下操作,我是否会受到显著的性能影响或改进:

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
}
var id=[]
ID.push($(“#abc”))
id.push($(“#def”))
id.push($(“#zyx”))
对于(变量i=0;i
您将看不到任何显著的性能增长,但这只是一个好习惯——不要请求两次,只要您可以一次一次地这样做


所以我的最后一个建议是:缓存jquery对象一次,然后使用jquery对象数组

您将得到一点改进,因为您将一些工作移出循环,并且只执行一次


不过,对于三件物品,你几乎不会注意到它们之间的区别。按id定位元素相当容易,因为浏览器有专门的方法,创建jQuery对象也不需要那么多工作。

您不必猜测,为什么不呢

无论如何,这一改变将大大提高性能。没有理由总是为相同的元素重建jQuery对象

我的建议:

还请注意,而不是:

var ids = [];
ids.push($("#abc"));
ids.push($("#def"));
ids.push($("#zyx"));
你可以这样做:

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

这节省了一些函数调用。

谢谢,我不确定的是在数组中存储jquery对象的开销。-1我不得不对此进行否决,因为这肯定不会大大提高性能。这是一个改进,值得去做,但充其量也只是勉强可以注意到。好吧,我能理解,也许不是很清楚,但这似乎是一个首选方法。另外,我不知道jsPerf,所以我发现它是一个有用的答案。@MathiasBynens:该测试不会比较查找元素和缓存结果,它比较的是从元素创建jQUery对象和将元素放入已经存在的jQUery对象。也就是说,已经找到并缓存了DOM元素。该测试与缓存结果无关,只测试创建jQuery对象本身所需的时间。@MathiasBynens:我就是这么说的。您使用的测试不是对您所声称的内容进行事件测试,而是完全不同的测试。此外,你是微观优化,这从来不是一个好的开始。如果您在一个实际对元素执行某些操作的测试中执行此操作,您将发现只有一小部分时间用于查找元素。当然,它可能多达20个左右。当我们无法控制客户端的硬件时,每一点都有帮助@杰夫夫:即使对20个人来说,这也不是什么大活儿。在一台像样的计算机上,一个最新的浏览器每秒可以执行1000次。我做了一个性能测试,结果表明差别不大。