【发布时间】:2015-01-13 18:09:29
【问题描述】:
我一直在处理一个导致性能问题的复杂角度页面。为了突出这个问题,我在这里创建了一个小提琴http://jsfiddle.net/4ex2xgL1/3/。
本质上,性能问题是由具有函数的 ng-class 语句引起的。
<span class="done-{{todo.done}}" ng-class="myfunction()">{{todo.text}}</span>
跨度在 ng-repeat 中。在运行 fiddle 时,可以看到 ng-class 在页面加载时被执行了几次,并且在每个键上它被调用的次数与 TODO 列表中的项目数一样多。
这是一个简单得多的例子,在我的例子中,我的页面上有 780 个项目,函数最终被评估了大约 3000 次!
我们看到的解决方案之一是拆分范围,但这几乎会导致我的应用程序被重写。
我们也尝试过https://github.com/Pasvaz/bindonce,但它似乎不适用于高度动态的内容。
有什么想法吗?
【问题讨论】:
-
在实际应用中,
myfunction()的输入是否依赖于ng-repeat中的当前项?它需要什么样的输入才能产生结果?可能的解决方案将取决于该函数的结果有多动态。 -
我认为不显示 780 项。仅显示可见项目。在 Google 无限列表中搜索
-
我想到的另一件事是根本不使用
ng-class。而是创建指令,它将根据您的需求更改类(基于用户行为) -
@ivarni:我们嵌套了 ng-repeat,并且在 ng-class 中有两个条件。如果条件为真,则将调用 myfunction()。在我们使用父母的 ng-repeat 和 myfunction() 的条件下,我们使用了 ng-repeat 子 ng-repeat
标签: javascript html angularjs