我已经看到很多关于访问对象属性的最快方法的问题(比如使用.vs []),但似乎无法找到检索对象属性是否更快,这些对象属性被声明为高于对象中的其他属性文字语法。
我正在处理一个最多可包含40,000个属性的对象,每个属性的长度为Array
。我将其用作按值查找。
我知道可能有5%的属性是我需要经常检索的属性。是否有以下任何一项值得提高性能(减少查找时间)?
或者,有更好的方法吗?
答案 0 :(得分:3)
我在这里做了一个js perf:http://jsperf.com/object-lookup-perf
我基本上用随机键将40000道具注入对象,保存了“第一”和“最后”键,并在不同的测试中查找它们。我对结果感到惊讶,因为访问第一个结果比访问最后一个条目慢35%。
此外,拥有5或40000个条目的对象并没有产生明显的差异。
测试用例很可能会得到改善,我可能会错过一些东西,但是有一个开始。
注意:我只测试过chrome
答案 1 :(得分:1)
是的,类似“indexOf”的搜索从前到后搜索,因此在列表中放置更高的公共项目会更快地返回它们。大多数“基本”搜索算法都是基本的自上而下(简单排序)搜索。至少对阵列而言。
答案 2 :(得分:1)
在对象文字语法的顶部设置最常用的属性?
没有。选择可读性而非性能。如果你没有足够的属性来在代码中使用文字,那么无论如何都无关紧要;你应该按逻辑顺序排列属性。
对象中的属性查找通常基于哈希映射,并且位置不应产生实质性差异。根据哈希的实现,它们可能会慢一些,但我猜这是非常随机的,并且在很大程度上取决于应用的优化。没关系。
如果#1没有效果,我应该创建两个单独的对象,一个具有最常见的5%属性,首先搜索一个,然后如果在那里找不到该属性,那么用所有对象查看该对象不常见的属性?
是。如果你有很多巨大的物体(有数以千计的物业),这是一个好主意。根据使用的数据结构,对象的大小可能会影响查找时间,因此如果您有更小的对象用于更频繁的属性,它应该更快。可能为两个对象选择了不同的结构,这些结构可能比单个对象更好 - 特别是如果您事先知道要查看哪个对象。但是,您需要使用实际数据测试此假设,并且应该注意premature [micro-]optimisation。
答案 3 :(得分:1)
如果你有这么多属性,必须计算它们,不是吗?因此,您可以通过整数哈希计算替换(字符串,最可能)计算,然后在常规数组中使用此哈希 您甚至可以通过将值放在2 * iith,2 * i + 1个插槽中来使用单个数组 如果你可以在这里使用一个类型化的数组,那就去做吧,你就不会更快。