प्रश्न के बाद Extending String.prototype performance मैं वास्तव में चिंतित हूं, क्योंकि "use strict"
को String.prototype
विधि में 10 बार बेहतर प्रदर्शन जोड़ा गया है। explanationbergi द्वारा छोटा है और यह मुझे समझाता नहीं है। दो लगभग समान तरीकों के बीच इतना नाटकीय अंतर क्यों है, जो शीर्ष पर "use strict"
में भिन्न है? क्या आप इसके बारे में अधिक विस्तार से और सिद्धांत के साथ समझा सकते हैं?क्यों "सख्त उपयोग" इस उदाहरण में प्रदर्शन 10x में सुधार करता है?
String.prototype.count = function(char) {
var n = 0;
for (var i = 0; i < this.length; i++)
if (this[i] == char) n++;
return n;
};
String.prototype.count_strict = function(char) {
"use strict";
var n = 0;
for (var i = 0; i < this.length; i++)
if (this[i] == char) n++;
return n;
};
// Here is how I measued speed, using Node.js 6.1.0
var STR = '0110101110010110100111010011101010101111110001010110010101011101101010101010111111000';
var REP = 1e4;
console.time('proto');
for (var i = 0; i < REP; i++) STR.count('1');
console.timeEnd('proto');
console.time('proto-strict');
for (var i = 0; i < REP; i++) STR.count_strict('1');
console.timeEnd('proto-strict');
परिणाम:
proto: 101 ms
proto-strict: 7.5 ms
क्या आप इस [i] === char' के साथ परीक्षण कर सकते हैं और देख सकते हैं कि आपको एक ही अंतर मिलता है या नहीं? –
मैंने डीओएम पर्यावरण में इस [i] === char' के साथ परीक्षण किया और परिणाम वही –
बर्गि का स्पष्टीकरण कहता है कि जब आप 'गिनती' फ़ंक्शन को कॉल करते हैं, तो 'यह' पैरामीटर स्ट्रिंग में डालना होगा एक स्ट्रिंग अक्षर के बजाय ऑब्जेक्ट जबकि सख्त मोड में इसे सही ढंग से संचालित करने के लिए नहीं है। यह मामला मेरे बाहर क्यों है, मुझे जवाब में बहुत दिलचस्पी है। –