我想使用 Chrome DevTools 识别我的 Web 应用程序 (Extjs 4.1 + PHP + OpenLayers) 中的内存泄漏。我在浏览应用程序之前和之后拍摄了堆快照。如下所示,初始大小为 19.5 MB。然后在使用一些功能后,它会增长到 27.9 MB。我让应用程序保持打开状态,几个小时后返回并拍摄了另一个堆快照,大小为 28 MB。然后我刷新页面,又回到19MB了。这是否意味着这些功能正在占用大量机器内存,我应该担心?
最佳答案
19 MB 基线表明您正在使用一个在内存中保存大量对象的库(如果我转到 Sencha 文档并导航几个地方,我会看到他们的页面也消耗了约 19mb 的内存,所以您看起来与他们处于同一水平)。
您的应用程序似乎还会将一些大型对象加载到内存中(使用应用程序时获得的额外 10 MB - 假设此处没有刷新),但由于您刷新了页面,因此占用空间下降到约 19 MB 的基线Chrome 中似乎没有任何内存泄漏。但是,当您在站点中导航时,您可能不会释放未使用的对象。使用完对象后,您可以通过将对象设置为 null ( How to free up the memory in JavaScript ) 来释放内存。
Chrome 中没有内存泄漏并不意味着 IE 或其他浏览器中没有内存泄漏。
在页面上停留几个小时时消耗的额外 0.1 MB 内存可能值得考虑 - 特别是如果您的最终用户将长时间离开页面和/或在低功耗下运行机器或移动设备。不过,客观地说,我的机器有 8 GB 内存,所以我必须让这个页面保持相当长的时间才会产生任何不利影响。
这是来自 mdn 的内存生命周期管理的详细描述,您可能会觉得有用:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management#Real_life_example
(对于大多数用户来说,我不会担心 30 MB 的堆;)
关于javascript - ExtJS 堆快照.. 我什么时候应该开始担心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793520/