加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 嵌套ng-repeat的DOM娱乐性能问题

发布时间:2020-12-17 18:04:11 所属栏目:安全 来源:网络整理
导读:我正在使用AngularJS渲染日历用户界面,而且在翻阅几周时我遇到了一些相当大的性能问题.让我解释. 用户界面看起来像这样: 我遍历所有人,然后为我循环的每个人,然后为那天的那个用户渲染日历对象.像这样(简化): div ng-repeat="user in ::ctrl.users track b
我正在使用AngularJS渲染日历用户界面,而且在翻阅几周时我遇到了一些相当大的性能问题.让我解释.

用户界面看起来像这样:

我遍历所有人,然后为我循环的每个人,然后为那天的那个用户渲染日历对象.像这样(简化):

<div ng-repeat="user in ::ctrl.users track by user.id" class="row">
    <div ng-repeat="day in ctrl.days" class="cell">
        <div ng-repeat="item in ctrl.items[user.id][day] track by item.id">
            <div class="item">

这个页面上没有疯狂的观察者数量(大约500个),几乎所有东西都是绑定一次.

问题是当用户单击上一个/下一个按钮以加载上一周或下周时.这将使用新的日期更改ctrl.days数组,并加载所有正确的项目.这样做会很好,直到你有大量的人和日历项目.然后所有DOM元素的破坏和重新创建都非常缓慢.

我遇到了sly-repeat指令,它用于缓存和重用DOM元素,但由于我的外部ng-repeat更改(ctrl.days),内部ng-repeat(带项目)也被重新创建.所以它并没有真正起作用.

我怎么解决这个问题?现在,使用大型数据集浏览数周需要大约2秒钟,这当然是不可接受的.通过一小组用户和日历项目,一切都非常活泼.

解决方法

尝试在嵌套的ng-repeats中使用track by.这将防止他们重新加载不必要的内部重复.有关更多信息,请参阅:

http://www.codelord.net/2014/04/15/improving-ng-repeat-performance-with-track-by/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读