角度绑定一次与轨道的性能

Led*_*dzz 6 javascript angularjs

我有一个ng-repeat指令,上面有一些过滤器,每次重复都有大量的DOM.例如:

<ul>
    <li ng-repeat='task in tasks'>
        <!--Some DOM with many bindings-->
    </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我想稍微提高性能,但我希望保持双向绑定.一种方法是通过以下方式插入曲目:

ng-repeat='task in tasks track by task.id'
Run Code Online (Sandbox Code Playgroud)

另一种方法是在绑定中使用一次本机绑定:

{{::task.name}}
Run Code Online (Sandbox Code Playgroud)

显然我不能同时使用它们,因为在这种情况下,双向绑定将不起作用.如何衡量DOM重建速度?哪种方式更有效?

Jos*_*osh 7

这些不是相互排斥的结构,两者都有不同的用途.

使用track by简单地允许Angular在添加或删除项目时更好地管理DOM.默认情况下,它使用整个对象的哈希值,与简单的原子值相比,它可能比较慢且效率低.

但是,使用一种时间绑定语法只会减少应用程序中的总监视数.这使得应用程序在执行更新时更具响应性,因为它有更少的内容需要关注.

  • 它们可能会影响不同的东西,但它们肯定会相互冲突.我正在构建的应用程序加载了一个充满数据的表.加载数据后,它不会更改,因此我可以在加载数据时一次性绑定所有内容.但是,我有一个刷新按钮,当按下时,去并重新获取数据.我想要显示的任何更改,但这也是300-400项的列表,因此使用`track by`可以加快速度.但是,使用两者都会导致任何更改无法更新.我如何使用这两个并仍然显示重新加载的任何更新? (3认同)