请帮助:) - 我不得不检查性能访问属性 - 工厂函数,连续继承和类,我不明白为什么连续继承失去?毕竟,对连续继承中复制的属性的访问应该是最快的。 我在Chrome上运行测试,Safari和CI总是丢失。从本次测试 https://jsperf.com/factory-function-vs-concatenative-inheritance-get性能访问属性 - 工厂函数与连续继承与类
代码:
const alien = {
sayHello() {
return `Hello, my name is ${ this.name }`;
}
};
//Delegate prototype
const createAlienFF = (name) => {
return Object.assign(Object.create(alien), {
name
});
}
//Delegate prototype - creating objects
var tabFF = [];
for(var i = 0; i < 1000; i++) {
tabFF[i] = createAlienFF('Clark' + i);
}
//Concatenative inheritance
const createAlienCI = (name) => {
return Object.assign(
{},
alien,
{name: name}
);
}
//Concatenative inheritance - creating objects
var tabCI = [];
for(var i = 0; i < 1000; i++) {
tabCI[i] = createAlienCI("Clark" + i);
}
//Class
class Alien {
constructor(name) {
this.name = name
}
sayHello() {
return `Hello, my name is ${ this.name }`;
}
}
//Class - creating objects
var tabClass = [];
for(var i = 0; i < 1000; i++) {
tabClass[i] = new Alien("Clark" + i);
}
//Tests
//1 - Delegate prototype
for(var i = 0; i < 1000; i++) {
tabFF[i].sayHello();
}
//2 - Concatenative inheritance
for(var i = 0; i < 1000; i++) {
tabCI[i].sayHello();
}
//3 - Class
for(var i = 0; i < 1000; i++) {
tabClass[i].sayHello();
}
在边缘它是类和CI之间的联系,在Firefox中它是CI的胜利。所以你的问题是关于Webkit的实现细节 –
你可以在问题中包含代码吗? – guest271314
我觉得这个测试不够好。例如,您应该将更复杂的类与更多级别的继承进行比较。例如,假设你有一个10级的类层次结构。在一个版本中,您将所有内容连接到单个对象上,而在另一个版本中,您将会有一个长达10级的原型链。这个较长的原型链可能真的显示出性能的差异。 – trusktr