Javascript AngularJS ng重复过滤器性能:自定义过滤器或ng显示/隐藏
tl;dr 什么是过滤大列表的最佳方式Javascript AngularJS ng重复过滤器性能:自定义过滤器或ng显示/隐藏,javascript,angularjs,performance,sorting,filtering,Javascript,Angularjs,Performance,Sorting,Filtering,tl;dr 什么是过滤大列表的最佳方式 这主要是关于性能 我有一个对象数组,我用ng repeat列出。将有数百到数千件物品。我现在需要根据以下任一项筛选列表: A.单一、简单的属性(如数字) B.多个条件(某些表达式) 最好的选择是: 使用自定义过滤器 使用ng show/ng hide 使用ng if 根本不在视图中进行筛选--可能使用服务+控制器(?) 使用ReactJS(?) 有关用例的详细信息: 我想用::一次性绑定绑定大多数对象的属性,尽管有些属性需要双向绑定(排序分数)
这主要是关于性能 我有一个对象数组,我用ng repeat列出。将有数百到数千件物品。我现在需要根据以下任一项筛选列表:
- A.单一、简单的属性(如数字)
- B.多个条件(某些表达式)
有关用例的详细信息:
- 我想用::一次性绑定绑定大多数对象的属性,尽管有些属性需要双向绑定(排序分数)
- 列表将在独立于用于筛选的字段的字段上动态排序。筛选出的项目可能不应包括在排序中
- 过滤需要是动态的
所以我找到了Ben Nadel的帖子,但我的问题是为了解决一般的标准用例。如果您使用的是Angular 1.3,那么Angular过滤器已经针对性能进行了优化。它们现在是无状态的,在原始数据源更改之前不会执行(或重新计算)。旧版本的角度过滤器并非如此。在这里了解这些无状态过滤器 对于旧版本,如果您可以在控制器或服务中进行过滤,并始终将过滤结果绑定到视图,则会更好。这是关于保留一个数组,例如
$scope.filteredItem=[]代码>,并在过滤器条件更改时更新它。
您仍然可以在代码中使用角度过滤器,使用$filter
服务。我实际上需要过滤器是有状态的,因为过滤器将依赖于服务。我想我应该添加一些范围滑块,并通过控制器变量将值连接到服务属性。因此,对于无状态筛选器,这将不起作用。也许还有另一种方法?依赖后端服务的有状态过滤器可能是一个巨大的性能杀手。对于有状态过滤器,它们在每个摘要周期上重新计算。最好在分配给视图之前过滤数据。它所依赖的不是后端服务,而是客户端服务。