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

前端之家收集整理的这篇文章主要介绍了javascript – jQuery的响应文本的AJAX内存泄漏?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用谷歌Chrome开发工具:堆快照调试我的应用程序内存泄漏,并注意到一些奇怪的事情.

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

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

1)纯JavaScript XHR

> source:http://jsfiddle.net/HZmT5/2/(使用XMLHttpRequest)
>输出http://fiddle.jshell.net/HZmT5/2/show/light/
>没有泄漏

2)使用$.getJSON

>来源:http://jsfiddle.net/JmA8v/1/(使用$.getJSON)
>输出http://fiddle.jshell.net/JmA8v/1/show/light/(显示泄漏)
>泄漏显示,见截图:

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

纯JS版本没有重现相同的行为.

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

解决方法

这个 video表明实际上没有内存泄漏. jQuery获取新版本的字符串,v8发布旧版本.这种行为的原因是V8引擎使用许多不同的技巧进行优化,并且可以在其内部结构和生成代码中保持对对象的引用.

视频中的蓝色条是分析器在v8堆中找到新对象/字符串的时刻.当v8将这些对象收集为垃圾时,条形变为灰色.

原文链接:https://www.f2er.com/ajax/157038.html

猜你在找的Ajax相关文章