JavaScript数组中的高速排序插入

JavaScript数组中的高速排序插入,javascript,arrays,performance,sorting,Javascript,Arrays,Performance,Sorting,我有一个基于AngularJS的web应用程序,它通过ng repeat显示日志消息列表。在这个ng repeat中,我只使用{{}绑定表达式,没有双向绑定。因此,这应该是相当快的 日志消息通过http发送到web应用程序,web服务器使用Socket.io将其发送到前端。基本上,这很好用 现在,有时一些日志消息的传输速度比其他消息快,因此它们的显示顺序并不完全正确:大多数消息是正确的,但有些消息不是 例如,您可能会收到日志消息1、2、3、5、4和6。所以4和5的顺序是错误的 现在我想在Angu

我有一个基于AngularJS的web应用程序,它通过
ng repeat
显示日志消息列表。在这个
ng repeat
中,我只使用
{{}
绑定表达式,没有双向绑定。因此,这应该是相当快的

日志消息通过http发送到web应用程序,web服务器使用Socket.io将其发送到前端。基本上,这很好用

现在,有时一些日志消息的传输速度比其他消息快,因此它们的显示顺序并不完全正确:大多数消息是正确的,但有些消息不是

例如,您可能会收到日志消息1、2、3、5、4和6。所以4和5的顺序是错误的

现在我想在AngularJS应用程序中以正确的顺序显示这些日志消息。最简单的方法是使用
orderBy
过滤器,但这会严重降低web应用程序的速度

因此,我认为已经进行排序插入可能是最容易的:因为列表是仅附加的,所以这应该没什么大不了的,而且由于列表几乎已排序,它应该只影响列表的最顶端

现在我的问题是如何以最有效的方式做到这一点

实际上,我需要按照两个标准进行排序:第一,每个日志消息都有一个时间戳,但是如果两个时间戳相等,第二件事就是一个不断增加的uuid。因此,例如,排序顺序应为:

10:22pm 6 blah
10:21pm 5 foo
10:21pm 4 bar
[...]
如您所见,消息按时间戳按相反顺序排序,在时间戳内按uuid按相反顺序排序(当然,我将显示的值缩短了一点)

请注意,仅按uuid排序是不够的,因为日志应用程序的多次运行总是从消息uuid 0开始,因此列表可能不止一次具有单个id

当然,最简单的方法是遍历数组,直到找到一个时间戳小于要插入的项目的时间戳的项目,然后对id执行相同的操作。但也许有更好的方法,即性能更好的方法


有什么想法或提示吗?

如果您知道数组是有序的(即它开始时是空的,或者在应用程序初始化时顺序正确),您可以使用二进制搜索算法将记录插入数组中。你可以根据你倾向于从服务器接收的数据的性质,将搜索的开始偏向数组的一端或另一端。嗯,我不完全相信。我们知道二进制搜索有多快,但是新元素不会出现在列表中的任何地方。它只在前几行……因此,如果我们有很多记录,二进制搜索可能会产生不必要的搜索努力:它搜索的99%的内容无论如何都不是正确的位置。从一开始就搜索不是会加快速度吗?这就是为什么我建议偏向初始搜索点;不要将阵列一分为二并从那里开始,而是将支点放在阵列前10%附近的某个位置。如果超出前10%,你的表现会更差,但这不太可能。对不起,我误解了。你当然是对的,这是个好主意,谢谢:-)!如果你把你的评论转化为回答,我会接受的。