【问题标题】:Backbone.js + Heap snapshot google chromeBackbone.js + 堆快照谷歌浏览器
【发布时间】:2015-08-26 00:27:10
【问题描述】:

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

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

这正常吗?

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

谢谢

【问题讨论】:

    标签: javascript backbone.js google-chrome-devtools


    【解决方案1】:

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

    是和不是。

    它应该回到它的初始值(或关闭),但这不会发生,直到真正触发垃圾收集,这在你的情况下看起来并没有发生。您可以通过点击小垃圾桶图标在“时间轴”选项卡下手动触发它。

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

    您会注意到节点的数量不会一直下​​降到页面最初加载时的位置,并且如果您不断添加/删除待办事项并多次触发垃圾收集,节点数量会继续上升。这可能表明存在少量泄漏,可能需要进一步调查。

    【讨论】:

    • 感谢您的回答。我尝试点击该图标,但没有任何反馈,似乎没有任何变化。
    • @AdrianFlorescu 我在录制时间线时正在这样做。您可以在触发 GC 后拍摄新快照,但更改可能非常小,很难注意到。时间线有更好的表示(恕我直言)。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2012-12-22
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多