javascript – 在TypeScript中哪种对象实例创建方式最快?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 在TypeScript中哪种对象实例创建方式最快?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2193字,纯文字阅读大概需要4分钟。
内容图文
我有以下3种创建对象实例的方法.
我想知道其中一个更快,占用更少的内存,为什么?
//Option 1
export interface Animal1 {
name: string;
color: string;
isHungry: boolean;
}
let animal: Animal1 = {
name: 'cat',
color: 'Brown',
isHungry: true
};
animal1.name = 'cat';
animal1.color = 'brown';
animal1.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);
在编码风格和维护方面,我更喜欢选项1和单元测试中的构建器类.选项3是最不喜欢的,因为它是:
>很难轻松创建对象,您必须设置所有属性
>难以维护,每次添加新属性时都需要更新每个实例创建
>当具有相同类型的属性的数量很高时,例如字符串,字符串,字符串,容易出错.您可能设置了错误的属性.
这三者之间有任何性能/内存差异吗?
解决方法:
与JavaScript相同.对象创建时间可能差别不大,但对使用这些类型的代码的整体性能有显着影响.这些选项并不相同.
原因是“隐藏类”JIT优化和JIT可以用单形代码做的事情.如果始终以相同的顺序初始化对象成员,则JIT可以为所有类型实例分配相同的“隐藏类”,然后使用此信息使用内存偏移而不是昂贵的哈希表查找来访问类成员.当您遍历具有相同隐藏类的对象集合(或重复调用具有相同隐藏类的参数的函数)时,JIT可以识别单态代码并编译函数的专用版本,省略过多的类型检查,动态内联方法调用,并做一些其他魔术,使现代JS VM如此之快.
因此,通常,单态代码比多态代码快,并且JIT使用属性初始化的顺序来确定“内部对象类型”.
https://draft.li/blog/2016/12/22/javascript-engines-hidden-classes/
https://richardartoul.github.io/jekyll/update/2015/04/26/hidden-classes.html
启用这些优化的最简单,最安全的方法是使用该类,并确保所有类成员始终在其构造函数中以相同的顺序初始化,这是示例中的选项3.选项2是最差的,因为不能保证“隐藏类”对于不同的类实例是相同的,并且JIT不会认为它们具有相同的类型.
最后但同样重要的是.关于JS JIT性能没有什么明显的.不仅JIT引擎使用稍微不同(但非常复杂)的优化策略,而且它们在一段时间内发展,这使得大多数关于JIT内部的文章在很短的时间内就过时了.但是,允许JIT利用单形代码的“隐藏类”或类似的优化是JS JIT性能的基础.
无论如何,不??要猜测性能,也不要相信别人说的看似明显的事情.测量它.
内容总结
以上是互联网集市为您收集整理的javascript – 在TypeScript中哪种对象实例创建方式最快?全部内容,希望文章能够帮你解决javascript – 在TypeScript中哪种对象实例创建方式最快?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。