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

时间:2013-01-23 11:57:58

标签: javascript memory backbone.js

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

基本上我的骨干1page应用程序在内存中不断增长,即使我正在进行所有可能的垃圾收集舞蹈,JSON.stringify(Obj).length在大多数对象上抛出action not secure,我如何能够更轻松地追踪那些僵尸反复试验。

1 个答案:

答案 0 :(得分:6)

您解散了Chrome开发者工具,但就我所知,它们是您获得的最佳选择。你必须明智地使用它们。

假设您要测试应用程序中的某些操作是否会泄漏内存。它可以是渲染视图,也可以获取一些新数据。我们称之为 Action

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

  1. <强>预热

    启动您的应用程序(导航到您的网站)。执行 Action 。拍摄快照。这个快照被丢弃了,但是它会运行GC并为你提供一个清晰的平台。预热还可以确保您不会对可测量的数据进行任何模糊测试:脚本评估,初始加载资源异步等。

  2. <强>基线

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

  3. <强>测量

    执行 Action 三次。拍摄快照。

  4. 现在你将有三个快照。第一个将被丢弃,但对我们来说有趣的是摘要 快照2和3之间分配的对象,以及delta 比较从快照3到快照2.您可以从“个人档案”视图的底部/状态栏中找到这些视图。

    Objects allocated between snapshots 2 and 3

    您在基线测量 shapshots之间看到的数据是 Action 的真实内存配置文件。之后,您只需要知道如何正确解释数据。为此,我建议Google's documentation on the profiler

    我认为此时不存在更好的工具或方法。如果有,我很乐意听到它。