javascript - jQuery 的响应文本的 AJAX 内存泄漏?

标签 javascript jquery ajax memory-leaks google-chrome-devtools

我在使用 Google Chrome Dev Tools:Heap Snapshots 调试我的应用程序是否存在内存泄漏时,发现了一些奇怪的事情。

我发出了一个 AJAX 请求来获取一个大型的 JSON 博客,显然原始响应文本停留在内存中,导致我的应用程序发生内存泄漏。

在 $.ajax 中似乎不太可能存在巨大的内存泄漏,但我希望能解释为什么会这样......如果我在 vanilla JS 中进行相同的实验,则不会显示泄漏.

1) 纯 JavaScript XHR

2) 使用 $.getJSON

屏幕截图:XHR 请求的整个 HTTP 响应都停留在内存中。 “快照 1”是在按下按钮之前。 “快照2”在之后。请注意下面的屏幕截图,它是堆前后的比较。

在纯 JS 版本中没有重现相同的行为。

enter image description here

(当然,HTMLDivElement 仍将保留在堆中,因为它在 DOM 中,但似乎没有必要将完整的 JSON 对象保留在堆中)

最佳答案

video证明实际上没有内存泄漏。 jQuery 获取新版本的字符串,v8 释放旧版本。出现这种行为的原因是 V8 引擎使用许多不同的优化技巧,并且可能会在其内部结构和生成的代码中保留对对象的引用。

视频中的蓝色条是探查器在 v8 堆中发现新对象/字符串的时刻。当 v8 将这些对象作为垃圾收集时,条形图变为灰色。

关于javascript - jQuery 的响应文本的 AJAX 内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23572149/

相关文章:

javascript - 有没有更短的方法来刷新 div

javascript - D3 值键的匹配方式是否与使用 enter() 时默认索引号的匹配方式相同?

Javascript/jQuery 自动设置和更新时间

javascript - 自定义.js :6 Uncaught TypeError: Cannot read property 'width' of null

javascript - 无法停止页面重新加载

c# - ASP.NET 使用 ASHX 返回 JSON

javascript - 我可以使用 CSS 来创建这种滚动行为还是应该使用 jQuery?

javascript - 子 div 在更改时未正确调整大小

javascript - 如何每秒更新 "event.clientX"?

jquery - ASP.NET MVC 场景,类似于 StackOverflow 上的 'Post your answer'