继扩展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 = …Run Code Online (Sandbox Code Playgroud)好的,所以我写了这个简单的javascript函数,使我的代码更具可读性:
Number.prototype.isBetween=function(a,b){
return(this>=a&&this<b);
};
Run Code Online (Sandbox Code Playgroud)
现在结果非常慢:我尝试了这个"基准"(我真的不知道如何正确地做这些事情,但这证明了我的观点):
var res=0;
var k=20;
var t=new Date().getTime();
for(var i=0;i<10000000;i++){if(k.isBetween(13,31)){res++;}}
console.log(new Date().getTime()-t);
Run Code Online (Sandbox Code Playgroud)
与
var res=0;
var k=20;
var t=new Date().getTime();
for(var i=0;i<10000000;i++){if(k>=13&&k<31)){res++;}}
console.log(new Date().getTime()-t);
Run Code Online (Sandbox Code Playgroud)
并且第一个脚本需要大约3000毫秒的chrome(并且chrome是我正在使用的和我感兴趣的东西),而第二个脚本只需要24ms - 整个因子125 更快.是扩展现有的类javascript提供了一个非常糟糕的主意?这里发生了什么?