0

経由でログ メッセージのリストを表示する AngularJS ベースの Web アプリケーションがありますng-repeat。このng-repeat中ではバインディング式のみを使用し{{}}、双方向バインディングは使用しません。したがって、これは非常に高速である必要があります。

ログ メッセージは http 経由で Web アプリケーションに送信され、Web サーバーは Socket.io を使用してそれらをフロントエンドに送信します。基本的に、これで問題なく動作します。

現在、一部のログ メッセージが他のメッセージよりも速く転送されることがあるため、正確な順序で表示されないことがあります。ほとんどのメッセージは正しいですが、一部のメッセージは正しくありません。

たとえば、ログ メッセージ 1、2、3、5、4、そして 6 が表示される場合があります。したがって、4 と 5 の順序が間違っています。

ここで、これらのログ メッセージを AngularJS アプリで正しい順序で表示したいと思います。これを行う最も簡単な方法はorderByフィルターを使用することですが、これは Web アプリケーションの速度を著しく低下させます。

リストは追加専用であるため、これは大したことではなく、リストはほとんどソートされているため、リストの一番上にのみ影響するはずです。

さて、私の質問は、これを最も効率的な方法で行うにはどうすればよいかということです。

実際には、2 つの基準で並べ替える必要があります。まず、各ログ メッセージにはタイムスタンプがありますが、2 つのタイムスタンプが互いに等しい場合、2 つ目は uuid の増加です。したがって、たとえば、ソート順は次のようになります。

10:22pm 6 blah
10:21pm 5 foo
10:21pm 4 bar
[...]

ご覧のとおり、メッセージはタイムスタンプによって逆の順序で並べ替えられ、タイムスタンプ内では uuid によって並べ替えられます (もちろん、表示されている値を少し短くしています)。

ロギング アプリケーションの複数回の実行は常にメッセージ uuid 0 で開始されるため、 uuidだけでソートするだけでは不十分であることに注意してください。したがって、リストには単一の ID が複数回含まれる場合があります。

もちろん、最も簡単な方法は、挿入するアイテムのタイムスタンプよりも小さいタイムスタンプを持つアイテムが見つかるまで配列を反復処理し、id で同じことを行うことです。しかし、おそらくより良い、つまりよりパフォーマンスの高いアプローチがあります。

アイデアやヒントはありますか?

4

0 に答える 0