如何获取浏览器内存中javascript对象的大小和数量

如何获取浏览器内存中javascript对象的大小和数量,javascript,memory,backbone.js,Javascript,Memory,Backbone.js,我知道你们中的大多数人会给我指出chrome profiler堆快照,但在空白页面(没有js没有css只有html>正文)上,它显示8mb堆大小,12到3万个对象取决于他的心情,所以它对于这项任务来说是完全无用的工具,我认为这个堆分析器对它显示的数据有自己的拙见,而不是事实,尽管其余的chrome开发工具都很棒 基本上,我的主干1页应用程序在内存中不断增长,即使我正在做所有可能的垃圾收集舞蹈,JSON.stringify(Obj)。length在大多数对象上抛出动作不安全,我如何能比反复试验更容

我知道你们中的大多数人会给我指出
chrome profiler堆快照
,但在空白页面(没有js没有css只有html>正文)上,它显示8mb堆大小,12到3万个对象取决于他的心情,所以它对于这项任务来说是完全无用的工具,我认为这个堆分析器对它显示的数据有自己的拙见,而不是事实,尽管其余的chrome开发工具都很棒


基本上,我的主干1页应用程序在内存中不断增长,即使我正在做所有可能的垃圾收集舞蹈,
JSON.stringify(Obj)。length
在大多数对象上抛出
动作不安全
,我如何能比反复试验更容易地追踪那些僵尸。

你不喜欢Chrome开发者工具,但据我所知,他们是你最好的。你只需要明智地使用它们

假设您想测试应用程序中的某些操作是否泄漏内存。它可以是视图的呈现,或者获取一些新数据。让我们称之为
操作

为了找出保留了多少内存以及保留了多少内存,首先需要获得一个可测量的基线,并消除噪声。实现这些目标需要三个步骤

  • 热身

    启动您的应用程序(导航到您的网站)。执行
    操作
    。拍摄堆快照。此快照已被丢弃,但它将运行GC并为您提供一个新的记录。预热还确保您不会对可测量的数据产生任何模糊:脚本评估、初始加载资源异步等

  • 基线

    执行
    操作
    三次。拍摄堆快照。这是我们将要比较的记忆重建和保留的基线。我们执行
    操作
    三次,以获得合理的平均值,以防执行路径中出现一些小的变化。确保每次都以完全相同的方式重复
    操作

  • 测量

    执行
    操作
    三次。拍摄堆快照

  • 现在您将有三个快照。第一个将被丢弃,但我们感兴趣的是快照2和快照3之间分配的对象的摘要,以及从快照3到快照2的增量比较。您可以从Profiles视图的底部/状态栏中找到这些视图

    基线测量形状快照之间看到的数据是
    操作
    的真实内存配置文件。之后,您只需要知道如何正确解释数据。为此我推荐


    我认为目前还没有更好的工具或方法。如果有,我很想听听。使用chrome中的快照差异功能:快照一个空页面,做一些测试,再次快照,差异。别忘了开发工具界面本身是用javascript构建的,我很确定它有影响。好的,我认为这是一个更简单的工具,谢谢你的建议