我有一个基于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排序(当然我稍微缩短了显示的值)。
请注意,它的 NOT 足以仅按uuid排序,因为日志应用程序的多次运行始终从消息uuid 0开始,因此列表可能只有一个id一次。
当然,最简单的方法是遍历数组,直到找到时间戳小于您要插入的项目的项目,然后使用id执行相同的操作。但也许有更好的,即更高效的方法。
任何想法或提示?