在这个例子中,为什么“使用严格”可以提高10倍的性能?

接下来的问题 扩展 String. 原型性能我真的很感兴趣,因为只是增加 "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
6574 次浏览