Javascript 是否担心潜在的内存泄漏
我正在构建一个用于将HTML表转换为类似excel的工作表的应用程序。我一直在担心性能,也一直在运行一些测试,我很好奇下面的配置文件是否是我需要担心的。请参阅下面的内存配置文件 要获得此配置文件,我需要“滚动”表格中的行(,单击顶行,按住箭头向下键)。该示例包含5行,而图形的列表要长得多:300行。滚动到列表中间后,我会暂停,强制进行垃圾收集,然后继续滚动到最后 简言之,每次下移到下一行时,都会创建一组输入元素,并将一些AngularJS内容(一个新范围,一些观察者)连接到它们。对于要转换回普通表行元素的行,则执行相反的操作(当然,如果有泄漏,则应该在这里) 关于内存:我想,直观地说,如果实现得很好,那么将Javascript 是否担心潜在的内存泄漏,javascript,angularjs,performance,memory-leaks,Javascript,Angularjs,Performance,Memory Leaks,我正在构建一个用于将HTML表转换为类似excel的工作表的应用程序。我一直在担心性能,也一直在运行一些测试,我很好奇下面的配置文件是否是我需要担心的。请参阅下面的内存配置文件 要获得此配置文件,我需要“滚动”表格中的行(,单击顶行,按住箭头向下键)。该示例包含5行,而图形的列表要长得多:300行。滚动到列表中间后,我会暂停,强制进行垃圾收集,然后继续滚动到最后 简言之,每次下移到下一行时,都会创建一组输入元素,并将一些AngularJS内容(一个新范围,一些观察者)连接到它们。对于要转换回普通
tr
元素转换为可编辑行状态的内存在该行转换回其原始状态(即:静态tr
状态)后应该被释放
分析图表,有两件事吸引了我的注意力
- 你可以清楚地看到一个攀爬锯齿状的图案,它是。一堆东西正在被释放,但不是全部。=>在表行中转换时,内容正在泄漏
- 然而,当强制执行GC时,一切都消失了。所以它毕竟不是内存泄漏,因为如果是的话,它现在不会消失。注意:好吧,我不能简单地分析锯齿阶段积累了什么,因为做快照会强制执行GC,这显然会清除我们在这里看到的所有内容
- 由于强制GC将其清除,因此它不是泄漏(?)。但直观地看,它应该在行转换后被释放:它是在幕后做复杂的事情,还是暗示了错误的代码(我可以在每次转换后重写这些东西以提升更完整的GC吗?)
- 我甚至应该担心在锯齿阶段上升的所有东西,因为它在强制GC之后被清理
- table-editor-cell.directive.js
- table-editor-row.directive.js
- table-editor.directive.js
关闭
,它是否被多次调用?,…element.on('click')和element.on('keydown'
元素是否在滚动过程中被取消引用。IOW:我会尝试查看这些侦听器何时以及是否被删除。@Keith我以前就考虑过这一点。Long AngularJS under the hood故事简短:每个HTML表只调用一次构造函数和链接函数(请参见在debugger中添加断点),所以这不应该是问题所在。问题归结为:为了分析内存/侦听器,我应该拍一张快照,=>它消失了。例如:它与GC一起消失了,所以它真的是泄漏吗?似乎GC没有(完全)触发