TypeScript 中哪种对象实例创建方式最快?

shi*_*iva 5 javascript typescript

我有以下 3 种不同的方法来创建对象实例。

我想知道其中哪一个更快,占用的内存更少,为什么?

//Option 1        
export interface Animal1 {
    name: string;
    color: string;
    isHungry: boolean;
}
let animal: Animal1 = {
    name: 'cat',
    color: 'brown',
    isHungry: true
};

//Option 2   
export class Animal2 {
    name: string;
    color: string;
    isHungry: boolean;
}
let animal2: Animal2 = new Animal2();
animal2.name = 'cat';
animal2.color = 'brown';
animal2.isHungry = true;
     
//Option 3   
export class Animal3 {
    constructor(public name:string, public color:string, public isHungry:boolean) {}
}
let animal3 = new Animal3('cat', 'brown', true);
Run Code Online (Sandbox Code Playgroud)

就编码风格和维护而言,我更喜欢在单元测试中使用构建器类的选项 1。选项 3 是最不受欢迎的,因为它是:

  • 轻松创建对象很困难,您必须设置所有属性
  • 难以维护,每次添加新属性时,您都需要更新每个实例创建
  • 当相同类型的属性数量较多时,例如字符串、字符串、字符串,容易出错。您可能设置了错误的属性。

这三者之间有性能/内存差异吗?

Ben*_*Ben 4

从一般意义上讲,不可能说它是 \xe2\x80\x9cfastest\xe2\x80\x9d。

\n\n

对象实例创建在 JavaScript 引擎中进行了高度优化。速度会受到周围代码、运行频率、运行时版本和许多其他因素的影响。

\n\n

I\xe2\x80\x99m 抱歉,这不是您想要的答案。

\n\n

就内存而言,您可以简单地计算每种方法创建的对象 - 但除非您正在编写高度优化的 JavaScript 片段(不太可能),否则这将毫无意义。

\n\n

通常,您选择的对象创建模式不应由性能驱动,而应由非功能性需求驱动,例如团队商定的代码风格、可维护性和 API 形状。

\n\n

当然,用TS或JS编写的算法仍然可以按照通常的方式分析时间和空间复杂度。

\n