Ham*_*ter 29 javascript performance
也就是说,如果我需要为单个数组插入调用这个函数,我是否更适合使用某种树或跳过列表数据结构?
T.J*_*der 18
您可以考虑是否要使用对象; 所有JavaScript对象(包括Array实例)都是(高度优化的)键/值对的集合,带有可选的原型实现应该(注意我不说"确实")具有合理的性能散列算法.(更新:那是在2010年.在2018年,对象在所有重要的JavaScript引擎上都得到了高度优化.)
除此之外,实现(例如,供应商)之间的性能splice会有很大差异.这就是为什么"不过早优化"对于将在多个供应商实现(例如,网络应用程序)中运行的JavaScript应用程序而言甚至比正常编程更合适的一个原因.保持代码良好的模块化,并在出现问题时解决性能问题.
根据在Chrome,Safari和Firefox中进行的测试,这是一个很好的经验法则:将单个值拼接到数组中间的速度大约是将数值推送/移动到数组一端的速度的一半.(注意:仅在10,000的数组上进行测试.)
http://jsperf.com/splicing-a-single-value
那很快.因此,您不太可能需要实现其他数据结构以便更多地提高性能.
更新:作为电子商务在下面的评论所指出的,该测试与每个沿进行昂贵的复制操作splice,push和shift,这意味着它低估在性能上的差异.这是一个修改过的测试,可以避免阵列复制,所以它应该更准确:http://jsperf.com/splicing-a-single-value/19