javascript中的工厂vs构造函数性能

时间:2017-02-04 19:48:58

标签: javascript performance constructor prototype factory

所以,当我们有一个简单的构造函数时:

function Vec(x, y) {
    this.x = x;
    this.y = y;
}

和工厂类似:

function VecFactory(x, y) {
    return {
        x: x,
        y: y
    }
}

表现具有可比性:

100000000 constructors: 1874 ms
100000000 factory calls: 1782 ms

但是当我们添加原型时:

function VecFactory(x, y) {
    let result = {
        x: x,
        y: y
    }
    Object.setPrototypeOf(result, Vec.prototype);
    return result;
}

表现急剧下降

100000000 factory calls: 13251 ms

分配给__proto__会使情况变得更糟,将所有原型方法克隆到每个对象中甚至更糟。

那么,为什么会这样呢?有没有办法提高工厂绩效?

UPD:使用Object.create代替Object.setPrototypeOf,如 Bergi 所示,将工厂通话时间降至8700毫秒左右。

0 个答案:

没有答案