我有一个带有代码完成编辑器的应用程序。用户开始键入时,将创建并显示一个proposal
数组。数组的创建非常快,几乎是即时的。最坏的情况是数组的长度约为500个项目。
问题在于,数组在用户键入时不断更改值。 ng-repeat
的呈现大约需要1-2秒,这在键入过程中是一个巨大的延迟。我真的不明白为什么这是一个问题,就计算500个项目而言,就是花生。
我宁愿不限制数组,因为用户可以滚动浏览它。还有其他建议可以加快速度吗?
<li ng-repeat="proposal in proposals" ng-dblclick="copyProposal()" ng-class="{selected : proposal.selected}">
<img src="assets/img/key.png" ng-show="proposal.isKey" class="icon"/>
{{proposal.text}}
<span ng-show="proposal.type" class="detail">- {{proposal.type}}</span>
</li>
最佳答案
除了track by
之外,您还可以使用单向绑定(bind)而不是双向绑定(bind)来减少观察者:
ng-repeat="proposal in proposals track by proposal.id"
{{::proposal.text}}
{{::proposal.type}}
您可以研究的另一件事(如果您在某处使用ng-model,例如您的文本输入)是ng-model-options debounce属性。您可以指定一个延迟,在此之后完成模型更新。例如,将防抖动设置为500ms,以便在用户快速连续键入时不会多次更新。
ng-model-options="{ debounce: 500 }"
( Angular > = 1.3)