{} 对象与自定义构造函数之间的隐藏 类 和等价性 (v8)
Hidden classes and equivalence between {} object vs. custom constructor (v8)
鉴于这篇文章:
http://richardartoul.github.io/jekyll/update/2015/04/26/hidden-classes.html
如果您创建一个构造函数,例如:
function Point(x,y) {
this.x = x;
this.y = y;
}
然后这样做:
var obj1 = new Point(1,2);
var obj2 = new Point(3,4);
obj1.a = 5;
obj1.b = 10;
obj2.b = 10;
obj2.a = 5;
意味着您在后台获得了某种性能优化。
不过我想知道,如果您只是这样做:
var obj1 = { a: 5, b: 10 }
var obj2 = { b: 10, a: 5 }
如果您对数千个对象遵循该模式,您是否会获得相同的性能优化,或者是否为每个 var objn
个实例创建一个新的隐藏 class。
基本上想知道是否需要使用构造函数来获得此性能优化。
正如文章摘要中所说:
Always instantiate your object properties in the same order so that hidden classes, and subsequently optimized code, can be shared.
在您的备选示例var obj1 = { a: 5, b: 10 }; var obj2 = { b: 10, a: 5 }
中,属性显然没有按相同的顺序添加,因此无法共享隐藏的类。
您不必使用构造函数本身,但使用构造函数是确保获得所需性能的最简单方法。 (它通常也被认为是符合人体工程学和良好的编码习惯。)
鉴于这篇文章:
http://richardartoul.github.io/jekyll/update/2015/04/26/hidden-classes.html
如果您创建一个构造函数,例如:
function Point(x,y) {
this.x = x;
this.y = y;
}
然后这样做:
var obj1 = new Point(1,2);
var obj2 = new Point(3,4);
obj1.a = 5;
obj1.b = 10;
obj2.b = 10;
obj2.a = 5;
意味着您在后台获得了某种性能优化。
不过我想知道,如果您只是这样做:
var obj1 = { a: 5, b: 10 }
var obj2 = { b: 10, a: 5 }
如果您对数千个对象遵循该模式,您是否会获得相同的性能优化,或者是否为每个 var objn
个实例创建一个新的隐藏 class。
基本上想知道是否需要使用构造函数来获得此性能优化。
正如文章摘要中所说:
Always instantiate your object properties in the same order so that hidden classes, and subsequently optimized code, can be shared.
在您的备选示例var obj1 = { a: 5, b: 10 }; var obj2 = { b: 10, a: 5 }
中,属性显然没有按相同的顺序添加,因此无法共享隐藏的类。
您不必使用构造函数本身,但使用构造函数是确保获得所需性能的最简单方法。 (它通常也被认为是符合人体工程学和良好的编码习惯。)