javascript - ExtJS 堆快照.. 我什么时候应该开始担心?

标签 javascript memory extjs memory-leaks

我想使用 Chrome DevTools 识别我的 Web 应用程序 (Extjs 4.1 + PHP + OpenLayers) 中的内存泄漏。我在浏览应用程序之前和之后拍摄了堆快照。如下所示,初始大小为 19.5 MB。然后在使用一些功能后,它会增长到 27.9 MB。我让应用程序保持打开状态,几个小时后返回并拍摄了另一个堆快照,大小为 28 MB。然后我刷新页面,又回到19MB了。这是否意味着这些功能正在占用大量机器内存,我应该担心?

enter image description here

最佳答案

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/

相关文章:

javascript - onKeyup 分别获取多个输入字段的值 : Jquery

javascript - 从 React Native WebView 中注入(inject)的 JavaScript 接收消息

iphone - CoreMotion 中的内存泄漏

c++ - 我如何知道一个 STL 对象占用了多少内存?

extjs - 如何在创建新项目或更新现有项目时将附加参数从商店发送到服务器端

extjs - 如何在 selenium webdriver 中处理 ExtJS 的组合框

javascript - 是否可以在 jQuery.each() 内部使用同步 promise sleep ?

javascript - 如何将这个 jquery 样式颜色集中到 css 中?

c - 从内存中读取 "zero"是否比读取其他值更快?

extjs - 如何使用 id 在 extjs 中自动选择网格记录?