Angularjs用桌子慢了

maa*_*nus 8 performance angularjs

我有一张大约30排,大约10列的桌子.行是一个更大的集合的子范围(我手动操作以避免巨大的DOM).列存储在列表中[{name: "firstname", width: 200}, {name: "married", type: "bool"}],这样可以提供一些灵活性(比如将属性"已婚"显示为复选框).

所以只有大约300个字段,但摘要周期大约需要一秒钟(在我的i5-2400 CPU @ 3.10GHz上).

我在解释Batarang表演页面时遇到了麻烦.它说

p.name | translate  16.0%  139.6ms
e[c.name]           15.8%  138.4ms
c.name | translate  11.1%   96.3ms
Run Code Online (Sandbox Code Playgroud)

(稀疏命名的)变量的含义对我来说很清楚:

  • e 代表实体,即表格行.
  • p 代表财产,只发生在桌子外面.
  • c 代表专栏.
  • e[c.name]代表字段内容(来自实体名称e的属性c).

但性能数据没有多大意义:

  • p.name只使用了10次,怎么可能需要那么长时间?
  • c.name | translate也只发生了10次(在标题行中),它怎么能花那么长时间?

我知道{::a_once_only_bound_expression},我尝试过,但没有太大的成功.我真正需要的是以下内容:

  • 当c更改时,重新创建整个表(这只是异常发生,所以我不关心速度).
  • 当e变化,重新建立其整个行(当有一个变化,那么只有在单排).

有没有办法实现这个目标?

解决方案的想法

我想,我需要的是使用一个指令在渲染后从行中剥离掉所有角度的东西:

  • 删除所有子范围
  • 用他们所有的手表
  • 但保留所有的HTML和听众

如果需要,我可以每行添加一个负责重绘的手表.

是否有意义?

更新

我一直忙于应用程序 - 改进除性能之外的其他事情.我很幸运,并获得了一些表现作为奖金.然后我将页面简化了一点,现在速度可以接受.至少现在(是.

仍然:

  • 我不相信上述Batarang的表现值.
  • 我仍然很好奇如何实现上述解决方案的想法,如果它是有道理的.

Tam*_*gun 0

您可能想看看NgTable,它将 json 数据的输入作为行和列放置,也许可以解决您的性能问题,我建议您检查一下