【发布时间】:2014-04-13 04:42:35
【问题描述】:
我正在显示一个包含大量数据的列表,并且它变得非常慢非常快(> 5 个条目 = 太慢)。我稍微修改了一下,发现问题不是数据量,而是生成的许多 DOM 元素。
我展示了一个只有一些元信息的表格。对于每个表格行,还有两个隐藏表格行,其中包括所有详细数据和一个编辑表单。单击一行会打开详细信息,单击某个编辑按钮会切换到编辑行。
没有编辑部分的简化 plunkr 可用here。
问题在于,每个条目都会生成三行,其中包含大量标签和数据。分页不是解决方案,因为问题已经以显着的方式表现出来,只有 4 或 5 个条目。我可以动态加载详细数据,但我发现瓶颈是 ng-repeat 必须创建的许多标签。 (我在这里弄错了吗?)
当我删除详细信息和编辑部分时,即使有 10 多个条目,页面加载速度也相当快。
一种解决方案可能是编写一次详细信息和编辑部分并将其隐藏,然后将其动态移动到相应的条目。我知道直接 DOM 操作在 Angular 中是不受欢迎的。有更好的解决方案吗? A plunkr that illustrates the idea
【问题讨论】:
-
您可以尝试的第一件事是使用
ng-if而不是ng-show,在您的情况下,它会将元素数量减少到一半......您可以做的第二件事是加快应用程序的速度,确保$scope上没有不相关的数据,您附加到范围的每一条数据都会降低性能 -
哇哦,如果似乎可以解决问题。所以 ng-if 仅在其为 true 时创建元素,而 ng-show 创建它们但隐藏它们?
-
是的,完全正确。
ng-if仅当表达式为真时才将元素添加到 DOM,在ng-show的情况下它始终存在,并且指令只是切换display:none样式
标签: javascript angularjs dom