1

我有一个实时显示日志的 Web 应用程序。这意味着,日志仍在写入中,我想相应地更新 UI。

目前,我通过使用数组来解决它并使用ng-repeat. 我不需要双向绑定,它只是显示一个简单的列表,但是 - 如前所述 - 带有更新。更新并不总是发生在列表的开头或结尾,但也可能发生在两者之间(不要问为什么,就是这样)。

基本上,我的方法是有效的——但是一旦我们有几百条日志消息,应用程序就会开始变得非常非常慢。

我该如何处理这个问题?

当然,我可以编写自己的指令,它只获取数组,将其连接起来并将其写入 HTML,但这不会实时反映变化,对吗?

4

1 回答 1

2

我过去处理过这两种方法。一容易,一难。

简单的方法:

编写一个过滤器并让您的 ng-repeat 从中获取它的条目。

<div data-ng-repeat="object in objects | myFilter:amount"></div>

在过滤器中,它只根据金额发回最新的(因此,如果您有 1000 个,并且金额为 50,则发回最新的 50 个)。如果您需要整个事情,请连接一个按钮,将金额切换为所有内容(或零,或其他)。缺点是您不会看到所有内容,而当您确实需要时,您会看到负载。

艰难的道路:

您必须编写一个指令来获取您的条目。根据每个日志条目的滚动位置和高度(它们都相同(更容易)?还是动态(更难)),屏幕上显示的元素的子集由它们前面的填充偏移。这可能会变得非常棘手,速度非常快,但我已经在超过 100,000 个条目的平板电脑上实现并运行了网格组件。只有大约 40 个被缓冲,当您滚动时,顶部的屏幕会被敲掉,而新的屏幕会进入。我在其中放置了几个有价值的屏幕作为备份,以防它们滚动得太快。

我不能只是将代码放在那里以了解如何做到这一点,因为它非常棘手,并且必须针对您的特定应用程序进行定制。

于 2013-09-19T15:08:54.790 回答