在探索构建类的几种不同方法时,我很好奇实例化和访问类的最快方法是什么。基于另一个问题的输入:
Javascript 作用域和 self=this, _this=this, that=this https://stackoverflow.com/questions/27925977/javascript-scope-and-self-this-this-this-that-this,
我现在正在研究创建类的三种方法,并好奇有哪些输入可以最快地创建和访问对象。
var DogClass = function DogClass(_age) {
this.age=_age;
this.setAge = function(num) {
this.age=num;
}.bind(this);
this.getAge = function() {
return this.age;
}.bind(this);
};
var BirdClass = function BirdClass(_age) {
var _this=this;
this.age=_age;
this.setAge = function(num) {
_this.age=num;
};
this.getAge = function() {
return _this.age;
};
};
var CatClass = function CatClass(_age) {
this.age=_age;
};
CatClass.prototype.setAge = function (num) {
this.age=num;
};
CatClass.prototype.getAge = function () {
return this.age;
};
function profileCreate() {
console.log("Creating a million of each");
var o,i,iterations=1000000;
console.time('createDog');
for(i=0;i<iterations;i++) {
o=new DogClass(4);
}
console.timeEnd('createDog');
console.time('createCat');
for(i=0;i<iterations;i++) {
o=new CatClass(4);
}
console.timeEnd('createCat');
console.time('createBird');
for(i=0;i<iterations;i++) {
o=new BirdClass(4);
}
console.timeEnd('createBird');
}
function profileAccess() {
console.log("Accessing a million of each");
var o,i,iterations=1000000;
console.time('accessDog');
for(i=0;i<iterations;i++) {
fido.setAge(5);
}
console.timeEnd('accessDog');
console.time('accessCat');
for(i=0;i<iterations;i++) {
fluffy.setAge(6);
}
console.timeEnd('accessCat');
console.time('accessBird');
for(i=0;i<iterations;i++) {
tweety.setAge(7);
}
console.timeEnd('accessBird');
}
每个创造一百万个
- 创建狗:1531.654ms
- 创建猫:7.301ms
- 创建鸟:605.982ms
每个访问量达一百万
- 访问狗:197.338ms
- 访问猫:11.404ms
- 访问鸟:7.031ms
如果我再次选择“个人资料访问”按钮,则 accessCat 方法会快得多。
- 访问狗:185.607ms
- 访问猫:0.958ms
- 访问鸟:11.095ms
???解释器是否由于传递静态号码而优化调用?
这是小提琴:http://jsfiddle.net/sday/yrropeer/3/ http://jsfiddle.net/sday/yrropeer/3/
关于代码中可能存在哪些错误会导致此小型性能测试无效,您有什么想法吗?在我看来,原型是创建类最快的,而 BirdClass 是访问最快的。