【发布时间】:2017-02-04 12:11:55
【问题描述】:
好的,所以我编写了这个简单的 javascript 函数以使我的代码更具可读性:
Number.prototype.isBetween=function(a,b){
return(this>=a&&this<b);
};
现在这变得非常缓慢:我尝试了这个“基准”(我真的不知道如何正确地做这些事情,但这证明了我的观点):
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);
对
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);
第一个脚本在 chrome 中大约需要 3000 毫秒(我正在使用并且我感兴趣的是 chrome),而第二个脚本只需要 24 毫秒 - 整整 125 毫秒快 .扩展现有类 javascript 是否提供了一个非常糟糕的主意?这是怎么回事?
【问题讨论】:
-
扩展现有类可能不是一个坏主意(请参阅 jQuery 插件),但扩展 标准内置类 是个坏主意,因为未来版本的 javascript 可能会破坏您的代码。了解prototype.js 发生了什么
-
不断传播。您要查找的术语是constant propagation。在您的第二个脚本中,不仅没有函数调用,甚至可能根本没有计算发生。
标签: javascript prototype benchmarking