当混合整数和长字符串时,WebKit JavaScript对象属性迭代会严重退化

当混合整数和长字符串时,WebKit JavaScript对象属性迭代会严重退化,javascript,performance,properties,webkit,Javascript,Performance,Properties,Webkit,我在JavaScript中迭代一个大对象的属性,遇到了一个瓶颈,特别是在浏览器中,我似乎无法编写代码 基本上,如果我有一个主要由整数值作为属性(1、2、4、10678等)设置关键帧的对象,然后添加一些长属性名(“somelongdescriptorofaproperty”),那么在对象上迭代时性能会下降10倍或更多(在我最坏的情况下是80倍!) 如果我有一个对象,它的属性是很多短字符串和一些长字符串,那么就不会发生这种情况,所以这不是“整数就是更快的家伙”。两者的混合似乎是一个因素 看看这个名字

我在JavaScript中迭代一个大对象的属性,遇到了一个瓶颈,特别是在浏览器中,我似乎无法编写代码

基本上,如果我有一个主要由整数值作为属性(1、2、4、10678等)设置关键帧的对象,然后添加一些长属性名(“somelongdescriptorofaproperty”),那么在对象上迭代时性能会下降10倍或更多(在我最坏的情况下是80倍!)

如果我有一个对象,它的属性是很多短字符串和一些长字符串,那么就不会发生这种情况,所以这不是“整数就是更快的家伙”。两者的混合似乎是一个因素

看看这个名字不好的jsperf,看看我的观点-->


为什么会这样?这是WebKit的“功能”吗?解决这个问题的方法是什么?要使单独的对象只包含整数属性和冗长的属性?

我不知道这是否是一个选项,但当迭代速度更快时,如果有短字符串而不是整数,我会在数字前加下划线或a或其他什么,这样您就有了像_0、_1、_2或a0、a1、,a2等等。这是一个想法,但当试图再次使用我程序的另一部分提供的这些整数访问属性时,会让事情变得很尴尬。如果不能为每种类型的属性描述符将对象拆分为两个,那么这肯定是我没有考虑过的回退。谢谢回复!