String.prototype प्रदर्शन का विस्तार करने के प्रश्न के बाद, मैं वास्तव में साज़िश कर रहा हूं, क्योंकि सिर्फ "use strict"एक String.prototypeविधि में सुधार करने से प्रदर्शन में 10 गुना सुधार हुआ है। स्पष्टीकरण द्वारा bergi कम है और मेरे लिए यह स्पष्ट नहीं होता। दो लगभग समान तरीकों के बीच इतना नाटकीय अंतर क्यों है, जो केवल "use strict"शीर्ष पर भिन्न है ? क्या आप इसके बारे में अधिक विस्तार से और इसके पीछे के सिद्धांत के साथ समझा सकते हैं?
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
this[i] === charएक डोम के वातावरण में परीक्षण किया और परिणाम वही है
countफ़ंक्शन को कॉल करते हैं, तो thisपैरामीटर को एक स्ट्रिंग शाब्दिक के बजाय एक स्ट्रिंग ऑब्जेक्ट में डालना होता है जबकि सख्त मोड में इसे सही ढंग से संचालित करने के लिए नहीं होता है। यह मामला मेरे से परे क्यों है, मुझे जवाब में बहुत दिलचस्पी है।
this, लेकिन सख्त मोड में यह उस कदम को छोड़ देता है, जिससे आपको आदिम स्ट्रिंग मिलती है , या जो कुछ भी प्रदान किया गया था this।
"use strict";हर जगह लड़कों के लिए समय है ! ग्यूओल्ड
this[i] === charऔर देख सकते हैं कि क्या आपको समान अंतर मिलता है?