我想使用Chrome DevTools识别我的网络应用程序(Extjs 4.1 + PHP + OpenLayers)中的内存泄漏。我在浏览应用程序之前和之后拍摄了一些快照。如下所示,初始大小为19.5 MB。然后使用一些功能后它会增长到27.9 MB。我将应用程序打开然后在几个小时后回来并拍摄另一个堆快照,它是28 MB。然后我刷新了页面,它又恢复了19 MB。这是否意味着这些功能正在占用大量的机器内存,我应该担心?
答案 0 :(得分:1)
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的内存,所以我必须保持这个页面很长一段时间才能产生任何不利影响。
这是您可能觉得有用的内存生命周期管理的详细说明:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management#Real_life_example
(对于大多数用户,我不担心30 MB的堆;)