ng-repeat性能 - 1300名观察员

时间:2018-01-13 08:23:58

标签: angularjs angularjs-ng-repeat

我在ng-repeat上有1300个观察者,我必须减少它。 最大的问题是我的ng-repeat中的很多东西都是双向绑定,因为我需要更改列表并每隔x次将新事件插入列表并处理di中的功能

许多观察者的Plunker示例以及应用程序的工作方式

https://plnkr.co/edit/rVIqaKbcnhAkvaeqcLA1?p=preview

我的应用程序如下:

通过每3秒轮询来从服务器获取事件Obj:

在我的控制器中我得到了数据:

 vm.eventData  = Server.eventData;

index html:

<event-list
        settings-data ="vm.settings"
        event-data = "vm.eventData"
</event-list>

事件列表指令:(当列表中有新的obj并在加载时显示列表时处理,当有新事件时由watchcollection更新并更新scope.eventData

 scope.$watchCollection('eventData', function(newVal, oldVal){
}

event-data-directive.html

    <li id="listItem_{{event.id}}" ng-repeat="event in eventsData track by $index">
在li里面,我有一个click指令来处理点击并显示事件,点击后,我需要用来自eventsData数组的数据更新视图

我尝试添加bindonce插件,但它没有帮助,因为它的单向绑定和我的应用中的每个操作都会影响事件列表

所以基本上我必须减少观察者或改变我的所有功能,你觉得怎么样?

感谢

1 个答案:

答案 0 :(得分:0)

如果元素列表很长(我假设基于许多观察者),我建议你看一下所谓的虚拟滚动/虚拟ng-repeat。

它基本上做的是它只渲染浏览器视口中可见的元素。这实际上具有仅为可见内容添加观察者的结果。每当用户将更多元素滚动到视图中时,虚拟滚动组件将无缝地呈现新元素,并销毁移出视图的元素。因此,无论列表中的元素数量如何,都要保持观察者的数量不变。

自己开始工作可能会很棘手,因此我建议您查看angular-vs-repeat之类的模块,或者,如果您已经使用了在某些组件中实现虚拟滚动的框架,请在其中启用它。