मैंने ठोस पर लूप के लिए उपयोग किया था परीक्षण मशीन (कोई गैर-मानक तृतीय पक्ष पृष्ठभूमि प्रक्रिया चल रही है)। मैंने for loop
बनाम while loop
चलाया क्योंकि यह 10,000 <button>
नोड्स की स्टाइल प्रॉपर्टी को बदलने से संबंधित है।
यहाँ बहुत सरल जावास्क्रिप्ट मैं इस उद्देश्य के लिए बनाया
function runPerfTest() {
"use strict";
function perfTest(fn, ns) {
console.time(ns);
fn();
console.timeEnd(ns);
}
var target = document.getElementsByTagName('button');
function whileDisplayNone() {
var x = 0;
while (target.length > x) {
target[x].style.display = 'none';
x++;
}
}
function forLoopDisplayNone() {
for (var i = 0; i < target.length; i++) {
target[i].style.display = 'none';
}
}
function reset() {
for (var i = 0; i < target.length; i++) {
target[i].style.display = 'inline-block';
}
}
perfTest(function() {
whileDisplayNone();
}, 'whileDisplayNone');
reset();
perfTest(function() {
forLoopDisplayNone();
}, 'forLoopDisplayNone');
reset();
};
$(function(){
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
setTimeout(function(){
console.log('cool run');
runPerfTest();
}, 1500);
});
यहाँ:
परीक्षण 1 रन क्रियान्वयन से पहले 1500 मिलीसेकंड के लिए टाइम आउट हो गया साथ लगातार 10 बार चलाया गया था है, क्या परिणाम
pen.js:8 whileDisplayNone: 36.987ms
pen.js:8 forLoopDisplayNone: 20.825ms
pen.js:8 whileDisplayNone: 19.072ms
pen.js:8 forLoopDisplayNone: 25.701ms
pen.js:8 whileDisplayNone: 21.534ms
pen.js:8 forLoopDisplayNone: 22.570ms
pen.js:8 whileDisplayNone: 16.339ms
pen.js:8 forLoopDisplayNone: 21.083ms
pen.js:8 whileDisplayNone: 16.971ms
pen.js:8 forLoopDisplayNone: 16.394ms
pen.js:8 whileDisplayNone: 15.734ms
pen.js:8 forLoopDisplayNone: 21.363ms
pen.js:8 whileDisplayNone: 18.682ms
pen.js:8 forLoopDisplayNone: 18.206ms
pen.js:8 whileDisplayNone: 19.371ms
pen.js:8 forLoopDisplayNone: 17.401ms
pen.js:8 whileDisplayNone: 26.123ms
pen.js:8 forLoopDisplayNone: 19.004ms
pen.js:61 cool run
pen.js:8 whileDisplayNone: 20.315ms
pen.js:8 forLoopDisplayNone: 17.462ms
यहांहै
अद्यतन
एक अलग परीक्षण मैं का आयोजन किया है के नीचे स्थित है, जो 2 अलग ढंग से लिखा भाज्य एल्गोरिदम, 1 को लागू करता है अन्य थोड़ी देर के पाश का उपयोग कर, पाश के लिए एक का उपयोग कर।
function runPerfTest() {
"use strict";
function perfTest(fn, ns) {
console.time(ns);
fn();
console.timeEnd(ns);
}
function whileFactorial(num) {
if (num < 0) {
return -1;
}
else if (num === 0) {
return 1;
}
var factl = num;
while (num-- > 2) {
factl *= num;
}
return factl;
}
function forFactorial(num) {
var factl = 1;
for (var cur = 1; cur <= num; cur++) {
factl *= cur;
}
return factl;
}
perfTest(function(){
console.log('Result (100000):'+forFactorial(80));
}, 'forFactorial100');
perfTest(function(){
console.log('Result (100000):'+whileFactorial(80));
}, 'whileFactorial100');
};
(function(){
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
runPerfTest();
console.log('cold run @1500ms timeout:');
setTimeout(runPerfTest, 1500);
})();
और भाज्य बेंचमार्क के लिए परिणाम:
pen.js:41 Result (100000):7.15694570462638e+118
pen.js:8 whileFactorial100: 0.280ms
pen.js:38 Result (100000):7.156945704626378e+118
pen.js:8 forFactorial100: 0.241ms
pen.js:41 Result (100000):7.15694570462638e+118
pen.js:8 whileFactorial100: 0.254ms
pen.js:38 Result (100000):7.156945704626378e+118
pen.js:8 forFactorial100: 0.254ms
pen.js:41 Result (100000):7.15694570462638e+118
pen.js:8 whileFactorial100: 0.285ms
pen.js:38 Result (100000):7.156945704626378e+118
pen.js:8 forFactorial100: 0.294ms
pen.js:41 Result (100000):7.15694570462638e+118
pen.js:8 whileFactorial100: 0.181ms
pen.js:38 Result (100000):7.156945704626378e+118
pen.js:8 forFactorial100: 0.172ms
pen.js:41 Result (100000):7.15694570462638e+118
pen.js:8 whileFactorial100: 0.195ms
pen.js:38 Result (100000):7.156945704626378e+118
pen.js:8 forFactorial100: 0.279ms
pen.js:41 Result (100000):7.15694570462638e+118
pen.js:8 whileFactorial100: 0.185ms
pen.js:55 cold run @1500ms timeout:
pen.js:38 Result (100000):7.156945704626378e+118
pen.js:8 forFactorial100: 0.404ms
pen.js:41 Result (100000):7.15694570462638e+118
pen.js:8 whileFactorial100: 0.314ms
निष्कर्ष: कोई फर्क नहीं पड़ता नमूने का आकार या विशेष कार्य प्रकार का परीक्षण किया है, वहाँ कोई स्पष्ट विजेता है
यहाँ कोड है थोड़ी देर के बीच और लूप के प्रदर्शन के संदर्भ में। क्रोम सदाबहार पर ओएस एक्स मैवरिक्स के साथ मैकएयर पर परीक्षण किया गया।
यदि आप चाहते हैं तो उन्हें मापें (लेकिन वे शायद बराबर हैं)। –
शर्त है कि वे बिल्कुल वही बाइट कोड उत्पन्न करते हैं। अधिकांश भाषाओं में – zwol
'के लिए' समकक्ष 'लूप' के लिए सिंटैक्टिक चीनी है, जो बदले में लेबल के एक सेट के लिए सिंटैक्टिक चीनी और असेंबली या आईएल में 'गेटोस 'नीचे है। भाषा की कल्पना के एक कुशल कार्यान्वयन को देखते हुए, ये लगभग बराबर होंगे। कुछ भाषाओं में आंतरिक "टिप्पणियां" शामिल होती हैं जो मूल कोड की तरह दिखने वाले डिकंपेलर/परावर्तकों को संकेत देती हैं, जिन पर प्रदर्शन पर नगण्य प्रभाव पड़ता है। मुझे लगता है कि आप पाएंगे कि इनके बीच सबसे बड़ा निष्पादन समय अंतर ओएस शेड्यूलिंग में निहित है। – KeithS