4

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

基本上我的主干 1page 应用程序在内存中不断增长,即使我正在做所有可能的垃圾收集舞蹈,JSON.stringify(Obj).length抛出action not secure大多数对象,我如何更容易地追踪那些僵尸然后试错。

4

1 回答 1

6

你对 Chrome 开发者工具不屑一顾,但据我所知,它们是你得到的最好的。你只需要明智地使用它们。

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

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

  1. 暖身

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

  2. 基线

    执行Action三遍。拍摄堆快照。这是我们将比较我们的内存保留和保留的基线。如果执行路径中存在一些小的可变性,我们会执行Action3 次以获得合理的平均值。Action确保每次都尝试以完全相同的方式重复。

  3. 测量

    执行Action三遍。拍摄堆快照。

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

在快照 2 和 3 之间分配的对象

您在基线测量快照之间看到的数据是真正的内存配置文件Action。之后,您只需要知道如何正确解释数据。为此,我推荐Google 关于 profiler 的文档

我认为目前不存在更好的工具或方法。如果有的话,我很想听听。

于 2013-01-23T15:14:42.720 回答