Backbone.js + 堆快照 google chrome

Backbone.js + Heap snapshot google chrome

我想知道这在单页应用中是否正常

如果你去:http://todomvc.com/examples/backbone/并拍摄一些添加和删除待办事项的堆快照——即使我删除了所有以前添加的待办事项,堆快照的内存每次都会增加。

这正常吗?

如果我删除所有待办事项,它是否应该回到初始值?

谢谢

Should this go back to the initial value if I remove all todos?

是也不是。

它应该回到它的初始值(或接近),但是直到真正触发垃圾收集时才会发生这种情况,这在您的情况下似乎没有发生。您可以通过单击小垃圾桶图标在 "Timeline" 选项卡下手动触发它。

在记录时间线时执行此操作(并选中内存复选框)以查看堆使用率再次下降。

您会注意到,节点数并没有一直下降到页面最初加载时的位置,而且如果您保持 adding/removing 待办事项并多次触发垃圾收集,它会继续上升.这可能表明存在小泄漏,可能需要进一步调查。

可能是泄漏,也可能是应用程序只是缓存了一些数据结构。随着 V8 将产生更多代码,堆使用量也可能会增加,例如作为功​​能优化的结果。即使不再调用该函数,此类代码在被收集之前也可能会在几个 GC 阶段中存活下来。这很复杂,通常您不必担心,因为 VM 应该会处理它。请记住,VM 可能会根据自己的需要分配一些内部数据结构,它们通常会随着时间的推移而收集。要查看 JavaScript 堆增长是否有效,您可以记录堆分配时间线 ("Profiles panel" > "Record Heap Allocations")。这将允许您按分配时间过滤对象,然后决定这些对象是否应该存活: