我可以通过在对象中定位属性来提高查找速度



我已经看到了很多有关访问对象属性的最快方法的问题(例如使用。vs []),但似乎找不到检索对象属性是否更快在对象文字语法中,该声明比其他人高。

我正在使用一个可能包含多达40,000个属性的对象,每个对象是长度2的Array

我知道,可能有5%的属性是我最需要检索的属性。以下任何一个值得提高性能(查找时间减少)是否值得?

  1. 将最常用的属性设置在对象字面语法的顶部?
  2. 如果#1没有效果较少的属性?

或,有更好的方法吗?

我在这里做了JS perf:http://jsperf.com/object-lookup-perf-perf

我基本上将40000个道具随机键注入一个对象,保存了"第一个"one_answers"最后"键,并在不同的测试中查找它们。我对结果感到惊讶,因为第一个访问比访问最后一个条目慢35%。

另外,具有5或40000条目的对象没有任何明显的差异。

测试案例很可能会得到改善,我可能错过了一些东西,但是您有一个开始。

注意:我仅测试了Chrome

是的,诸如" indexof"搜索之类的东西在前后搜索,因此将较高的常见项目放在列表中会更快地返回它们。大多数"基本"搜索算法是基本自上而下的(简单排序)搜索。至少对于数组。

如果您有这么多属性,则必须计算它们,不是吗?因此,您可以通过整数哈希计算替换(很可能是字符串)计算,然后在常规数组中使用此哈希。
您甚至可以通过将值放在2*ith,2*i 1个插槽中使用一个单个数组。
如果您可以在此处使用类型的数组,请执行此操作,并且您无法更快。

在对象文字语法的顶部设置最常用的属性?

否。选择可读性而不是性能。如果您有足够多的属性以在代码中使用文字,那么无论如何都没关系;您应该以逻辑序列订购属性。

对象中的属性查找通常基于哈希地图,位置不应产生实质性的差异。根据哈希的实现,它们可能会忽略较慢,但是我想这是非常随机的,并且在很大程度上取决于应用的优化。没关系。

如果#1没有效果较少的属性?

是。如果您拥有非常巨大的对象(具有数千个属性),那么这是一个好主意。根据所使用的数据结构,对象的大小可能会影响查找时间,因此,如果您有一个较小的对象,则应该更快地属性。对于两个对象,可能会选择不同的结构,这可能比单个对象更好 - 尤其是如果您事先知道要查找的对象。但是,您需要使用实际数据来检验此假设,并且应提防早产[Micro-]优化。

最新更新