এই প্রশ্নের অনুসরণ করে স্ট্রিং.প্রোটোটাইপ পারফরম্যান্সটি আমি সত্যিই আগ্রহী, কারণ কেবল "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করতে পারেন এবং দেখতে পাচ্ছেন যে আপনি একই পার্থক্য পেয়েছেন?