是否担心潜在的内存泄漏问题

时间:2017-09-18 13:33:13

标签: javascript angularjs performance memory-leaks

我正在构建一个library for AngularJS,旨在将HTML表格转换为类似excel的表格。我一直担心性能而且我一直在进行一些测试,我很好奇下面的配置文件是否需要担心。请参阅下面的内存配置文件Profile

要获取此配置文件,我将“滚动”表格行(see the basic example,点击顶行,按住向下箭头键)。该示例包含5行,而图表是使用更长的列表生成的:300行。滚动到列表中间后,我会暂停,强制进行垃圾收集,然后继续滚动到最后。

简而言之,每次向下移动到下一行时,都会创建一堆输入元素,并且会将一些AngularJS内容(一个新范围,一些观察者)连接到它们。对于正在转换回普通表行元素的行(当然,如果有什么东西泄漏,它可能在这里),则相反。

关于内存:我想,直觉上,它应该是有意义的,因为它已经很好地实现了,一旦转换回来,应该释放与将tr元素转换为可编辑行状态相关的内存进入其原始状态(即:静态tr状态)

分析图表时,有两件事引起了我的注意。

  • 你可以清楚地看到a strong indicator for a memory leak的攀爬锯齿形图案。一堆东​​西正在被释放,但不是全部。 =>在通过表格行转换时,东西正在泄漏
  • 然而,当强行做GC时,一切都消失了。所以它毕竟不是内存泄漏,因为如果是这样的话,它就不会消失了。注意:afaik我无法轻易分析在锯齿阶段积累的东西,因为执行快照强制GC,这显然清除了我们在这里看到的所有内容。

因此我的问题:

  • 由于强制GC清理它,它不是泄漏(?)。但是直观地看到它应该在行转换之后被释放:它是否在引擎盖下执行复杂的操作,或者它是否暗示了错误的代码(我可以在每次转换后重写内容以促进更完整的GC吗?)
  • 我是否应该担心在锯齿阶段出现的所有事情,因为在强制GC之后它会被清理干净?

[编辑] 如果您想查看代码,可以here。大多数肉都在

  • table-editor-cell.directive.js
  • 表编辑器-row.directive.js
  • 表editor.directive.js

0 个答案:

没有答案