Tenho o seguinte script comparando o tempo que leva para declarar um objeto com uma classe em comparação diretamente com um objeto.
console.time("class decls");
class Dog {
a;
constructor() {
this.a = 1;
}
bark() {
this.a + this.a;
}
}
for (let i = 0; i < 1_000_000; ++i) {
let dog = new Dog();
dog.bark();
}
console.timeEnd("class decls");
console.time("object decls");
for (let i = 0; i < 1_000_000; ++i) {
let dog = {
a: undefined,
bark() {
this.a + this.a;
}
}
{ // inlining the constructor
dog.a = 1;
}
dog.bark();
}
console.timeEnd("object decls");
Os resultados parecem favorecer fortemente o primeiro método, apresentando os seguintes tempos quando executado com Bun e resultados semelhantes quando executado com Node:
[8.46ms] class decls
[27.98ms] object decls
Por que é muito mais rápido declarar uma classe e então construir um novo objeto dela? Há algum cache acontecendo ou é outra coisa?