我必须将大量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%。为什么呢?
答案 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