ठीक है, मैंने एक सरणी और एक सेट से तत्वों को जोड़ने, पुनरावृत्ति और हटाने का परीक्षण किया है। मैंने "छोटा" परीक्षण चलाया, जिसमें 10 000 तत्वों का उपयोग किया गया और 100 000 तत्वों का उपयोग करके "बड़ा" परीक्षण किया गया। यहाँ परिणाम हैं।
तत्वों को एक संग्रह में जोड़ना
ऐसा लगता है कि सेट विधि की .push
तुलना में सरणी विधि लगभग 4 गुना तेज है .add
, कोई फर्क नहीं पड़ता कि तत्वों की संख्या जोड़ी जा रही है।
संग्रह में तत्वों को बदलना और संशोधित करना
परीक्षण के इस भाग के लिए मैंने for
सरणी पर पुनरावृति करने के लिए एक लूप का उपयोग किया और for of
सेट पर पुनरावृति करने के लिए एक लूप। फिर, सरणी पर पुनरावृति तेज थी। इस बार ऐसा लगेगा कि यह तेजी से बढ़ रहा है, इसलिए इसे "छोटे" परीक्षणों के दौरान दो बार और "बड़े" परीक्षणों के दौरान लगभग चार गुना लंबा समय लगा।
एक संग्रह से तत्वों को निकालना
अब यह वह जगह है जहां यह दिलचस्प हो जाता है। मैंने एक for
लूप के संयोजन का उपयोग किया और .splice
कुछ तत्वों को सरणी से हटाने के लिए और मैंने उपयोग किया for of
और .delete
कुछ तत्वों को सेट से हटा दिया। "छोटे" परीक्षणों के लिए, सेट से वस्तुओं को हटाने के लिए लगभग तीन गुना तेज था (2.6 एमएस बनाम 7.1 एमएस) लेकिन चीजें "बड़े" परीक्षण के लिए काफी बदल गईं जहां केवल सरणी से आइटम हटाने के लिए 1955.1 एमएस लिया। 83.6 एमएस लिया, उन्हें 23 बार तेजी से सेट से हटाने के लिए।
निष्कर्ष
10k तत्वों पर, दोनों परीक्षण तुलनात्मक समय (सरणी: 16.6 एमएस, सेट: 20.7 एमएस) पर चले गए लेकिन 100k तत्वों के साथ काम करते समय, सेट स्पष्ट विजेता था (सरणी: 1974.8 एमएस, सेट: 83.6 एमएस) लेकिन केवल हटाने के कारण ऑपरेशन। अन्यथा सरणी तेज थी। मैं बिल्कुल नहीं कह सकता कि ऐसा क्यों है।
मैंने कुछ हाइब्रिड परिदृश्यों के साथ खेला, जहाँ एक सरणी बनाई गई थी और आबादी थी और फिर एक सेट में परिवर्तित हो गई जहाँ कुछ तत्वों को हटा दिया जाएगा, फिर सेट को एक सरणी में फिर से जोड़ा जाएगा। हालांकि ऐसा करने से सरणी में तत्वों को हटाने की तुलना में बहुत बेहतर प्रदर्शन मिलेगा, एक सेट के बजाय एक सरणी को पॉप्युलेट करने के लाभों को सेट आउट से स्थानांतरित करने के लिए आवश्यक अतिरिक्त प्रसंस्करण समय। अंत में, यह केवल एक सेट के साथ सौदा करने के लिए तेज़ है। फिर भी, यह एक दिलचस्प विचार है, कि अगर कोई किसी बड़े डेटा के लिए डेटा संग्रह के रूप में एक सरणी का उपयोग करने के लिए चुनता है जिसमें डुप्लिकेट नहीं है, तो यह लाभप्रद प्रदर्शन बुद्धिमान हो सकता है, अगर कभी एक में कई तत्वों को निकालने की आवश्यकता होती है ऑपरेशन, सरणी को सेट में बदलने के लिए, निष्कासन ऑपरेशन करें, और सेट को वापस सरणी में परिवर्तित करें।
सरणी कोड:
var timer = function(name) {
var start = new Date();
return {
stop: function() {
var end = new Date();
var time = end.getTime() - start.getTime();
console.log('Timer:', name, 'finished in', time, 'ms');
}
}
};
var getRandom = function(min, max) {
return Math.random() * (max - min) + min;
};
var lastNames = ['SMITH', 'JOHNSON', 'WILLIAMS', 'JONES', 'BROWN', 'DAVIS', 'MILLER', 'WILSON', 'MOORE', 'TAYLOR', 'ANDERSON', 'THOMAS'];
var genLastName = function() {
var index = Math.round(getRandom(0, lastNames.length - 1));
return lastNames[index];
};
var sex = ["Male", "Female"];
var genSex = function() {
var index = Math.round(getRandom(0, sex.length - 1));
return sex[index];
};
var Person = function() {
this.name = genLastName();
this.age = Math.round(getRandom(0, 100))
this.sex = "Male"
};
var genPersons = function() {
for (var i = 0; i < 100000; i++)
personArray.push(new Person());
};
var changeSex = function() {
for (var i = 0; i < personArray.length; i++) {
personArray[i].sex = genSex();
}
};
var deleteMale = function() {
for (var i = 0; i < personArray.length; i++) {
if (personArray[i].sex === "Male") {
personArray.splice(i, 1)
i--
}
}
};
var t = timer("Array");
var personArray = [];
genPersons();
changeSex();
deleteMale();
t.stop();
console.log("Done! There are " + personArray.length + " persons.")
कोड सेट करें:
var timer = function(name) {
var start = new Date();
return {
stop: function() {
var end = new Date();
var time = end.getTime() - start.getTime();
console.log('Timer:', name, 'finished in', time, 'ms');
}
}
};
var getRandom = function (min, max) {
return Math.random() * (max - min) + min;
};
var lastNames = ['SMITH','JOHNSON','WILLIAMS','JONES','BROWN','DAVIS','MILLER','WILSON','MOORE','TAYLOR','ANDERSON','THOMAS'];
var genLastName = function() {
var index = Math.round(getRandom(0, lastNames.length - 1));
return lastNames[index];
};
var sex = ["Male", "Female"];
var genSex = function() {
var index = Math.round(getRandom(0, sex.length - 1));
return sex[index];
};
var Person = function() {
this.name = genLastName();
this.age = Math.round(getRandom(0,100))
this.sex = "Male"
};
var genPersons = function() {
for (var i = 0; i < 100000; i++)
personSet.add(new Person());
};
var changeSex = function() {
for (var key of personSet) {
key.sex = genSex();
}
};
var deleteMale = function() {
for (var key of personSet) {
if (key.sex === "Male") {
personSet.delete(key)
}
}
};
var t = timer("Set");
var personSet = new Set();
genPersons();
changeSex();
deleteMale();
t.stop();
console.log("Done! There are " + personSet.size + " persons.")