Javascript big-O属性访问性能
JavaScript属性访问(在当前实现中)的性能特征是什么Javascript big-O属性访问性能,javascript,Javascript,JavaScript属性访问(在当前实现中)的性能特征是什么 假设阵列访问是O(1)安全吗 如果我使用一个对象作为哈希表(带有字符串键),我可以安全地假设O(1)或O(logn)访问时间吗 是否有比其他浏览器或环境快/慢得多的常见浏览器或环境,我应该密切关注 JavaScript标准有什么要说的吗 最重要的是: 对于这种渐进式JavaScript性能问题,我在哪里可以找到好的参考资料 JavaScript中的每个对象都是作为对象哈希实现的,因此没有功能上的差异 例如,检查此测试: var
- 假设阵列访问是O(1)安全吗
- 如果我使用一个对象作为哈希表(带有字符串键),我可以安全地假设O(1)或O(logn)访问时间吗
- 是否有比其他浏览器或环境快/慢得多的常见浏览器或环境,我应该密切关注
- JavaScript标准有什么要说的吗
- 对于这种渐进式JavaScript性能问题,我在哪里可以找到好的参考资料
- JavaScript中的每个对象都是作为对象哈希实现的,因此没有功能上的差异
例如,检查此测试:
var arr = [];
arr[5] = 5;
arr['5'] = 'not 5';
console.log(arr.length, arr);
// output: 6 [undefined, undefined, undefined, undefined, undefined, "not 5"]
当用作位置时,数字是字符串化的
有关更多信息,请参阅关于JavaScript。特别重要的部分在“阵列”标题下:
JavaScript中的数组也是哈希表对象。
性能不是一个真正的问题,除非你有大量的对象要跟踪(比如500000+),在这种情况下,你可能做了一些错误的事情
你可以做一些优化,但除非你用JavaScript做一些不自然的事情(比如压缩算法……我用JS做了一个LZMA实现……坏主意),否则这些优化就没有意义
注:
如果您有一个备用集(比如您只定义了10000个索引中的10个),那么您可能应该使用常规对象。数组将所有10000个索引初始化为“未定义”,而
Object.keys(obj)
将只报告您设置的10个索引。这是一个小优化,实际上是有意义的。你自己做的研究告诉了你这些问题中的任何一个吗?我不想自己做很多研究,这些研究a)我可能会出错,b)很可能是由比我更精通这一主题的人做的。更新:我愿意知道对象和数组的行为,但我真的想知道大数字会发生什么。无论如何,你可能不需要去500000——如果某个值是O(N^2),那么几千就足够让你开始担心了。阅读链接。数组是哈希表。这意味着查找可能是O(logn)(有很多优化)。我的同事做了一些测试,发现在你超过50000或其他大的数据之前,这一点并不重要。