为什么jQuery的$ .each如此之快?

时间:2015-04-23 15:28:22

标签: jquery xml

我必须将大量XML数据解析为对象。我想到了将XML用于对象的三种方法:

XML

<myXml>
  <tag1 val = "someVal"/>
  <tag2 val = "someVal"/>
  <tag3 val = "someVal"/>
</myXml>

选项1:使用.find()

var xml = getMyXml();
var myObj = {
   1 : xml.find('tag1').attr('val'),
   2 : xml.find('tag2').attr('val'),
   3 : xml.find('tag3').attr('val'),
}

选项2:使用.each()

var xml = getMyXml();
var myObj = {
   1 : 'tag1',
   2 : 'tag2',
   3 : 'tag3',
}
$.each(myObj, function(i,e){
  myObj[i] = xml.find(e).attr('val');
});

选项3:数组

var xml = getMyXml();
var myArr = ['tag1','tag2','tag3']
var myObj = {};
for(var i = 0; i < myArr.length; i++){
 myObj[i] = xml.find(myArr[i]).attr('val');
}

使用此perf http://jsperf.com/each-vs-arraysdfsdf 选项2 比其他选项快82%。为什么呢?

1 个答案:

答案 0 :(得分:1)

如果你不混合数组和jquery,只需使用带有数组的纯javascript函数,那么结果就完全不同了,而且速度太快了。使用jquery每个选择器开销都经过优化可能是因为测试用例更快。

var len = digitalArr.length; //Cache the length
var i = 0;
for (; i < len ; i++) {
  obj[i] = xmlobj.getElementsByTagName(''+digitalArr[i]+'')[0].getAttribute('val');
}

检查jsperf结果here