我有一个基于 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 执行相同的操作。但也许有更好的,即性能更高的方法。
有什么想法或提示吗?