Javascript中最快的类/对象访问/实例化是什么

时间:2015-01-14 07:02:50

标签: javascript

在探索构建类的几种不同方法时,我很好奇实例化和访问类的最快方法是什么。基于另一个问题的输入:

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');
}

每个人创造一百万

  • createDog:1531.654ms
  • createCat:7.301ms
  • createBird:605.982ms

获取每个百万

  • accessDog:197.338ms
  • accessCat:11.404ms
  • accessBird:7.031ms

如果我第二次选择“配置文件访问”按钮,则accessCat方法会快得多。

  • accessDog:185.607ms
  • accessCat:0.958ms
  • accessBird:11.095ms

???解释器是否因为传递静态数而优化了呼叫?

这是小提琴:http://jsfiddle.net/sday/yrropeer/3/

有关我可能在代码中出现哪些错误以使此迷你性能测试失效的任何想法?在我看来,原型是创建类最快的,而BirdClass是最快的访问。

1 个答案:

答案 0 :(得分:0)

有很多设计模式可以创建类,对象,每个都有自己的优点。为了比较它们,请查看this