我正在使用谷歌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将这些对象收集为垃圾时,条形变为灰色.

javascript – jQuery的响应文本的AJAX内存泄漏?的更多相关文章

  1. ios – 为什么重复创建和删除SKShapeNode和SKNode导致内存泄漏?

    使用Xcode附带的spritekit模板,我修改场景如下:该应用程序似乎继续使用更多内存,直到它挂起或崩溃.使用泄漏和分配工具,我发现了以下内容:泄漏:分配:从图像中可以看出,存在大量使用内存的Malloc调用.我不直接调用Malloc–似乎这些调用是由SpriteKit完成的.同样,存在许多内存泄漏,这似乎也是由于SKShapeNode,SKNode或其他SpriteKit对象造成的.我如何解决或解决此内存(泄漏)问题?

  2. ios – Xcode显示内存泄漏,但仪器没有

    当我从Xcode运行我的应用程序时,很明显我有一个内存泄漏:当我提供一个自定义的ViewController时,内存增加,但是当我关闭它时,它不会退回.所以我也检查了使用仪器的分配工具,但这说明了一个不同的故事:可以看出,当我呈现ViewController时,仪器会显示尖峰,但是当内存使用被关闭时,内存使用率将恢复到以前的级别.我已经检查了我的代码至少15次,我个人无法找到任何内存泄漏,因此同意

  3. ios – 内存泄漏与UIWebView和Javascript

    清楚地包含一个Javascript文件到我的HTML是使UIWebView泄漏内存.当我重复使用相同的UIWebView对象时,或者每当我有内容实例化一个新的漏洞时,会出现泄漏的事实,导致我认为必须有一些JavaScript文件被loadHTMLString处理,导致泄漏.有人知道如何解决这个问题吗?

  4. ios – SBJson – 有内存泄漏?

    我刚刚克隆了SBJson框架的git存储库,并将源代码导入到我的应用程序中.跑了一个静态内存探查器,并从我看到的结果有点害怕.看图这怎么可能?我怀疑这个知名图书馆的开发者没有看到这个?事实上,如果运行内存配置文件,它会显示此库中的内存泄漏.有任何想法吗?

  5. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  6. 14.6 Swift中weak解决循环强引用

    /**循环强引用ARC不是万能的,它可以很好的解决内存过早释放的问题,但是在某些场合下不能很好的解决内存泄漏的问题。直接用官方例子*/classPerson{letname:Stringinit{self.name=name}varapartment:Apartment?这就是所谓的循环强引用*///这是强引用,不要认为可选类型就是弱引用啊,只有通过weakuNowned才是弱引用varjohn:Person?*//**在变量tenant前加上weak修饰,也就是将其中的一个变量设置为弱引用就行了。joh

  7. Swift闭包中的内存泄漏

    内存泄漏不仅破坏用户体验,而且会影响性能甚至应用的安全。既然内存泄漏如此的重要,所以这篇文章在这篇文章将说一说Swift闭包中的内存泄漏问题。Apple在文章中详细介绍了循环强引用的概念、何为内存泄漏、如何避免。内存泄漏的调试上面我们分析了大部分闭包中的循环引用问题,我们得知并不是所有的情况下都会导致内存泄漏。

  8. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  9. Android – 从低内存条件恢复

    我正在开发一个非常强烈的图像处理应用程序,我在水平FragmentStatePagerAdapter中有多个ListFragments.我积极地采用几乎每一个窍门和建议,我能够在这里和其他地方找到.我下载位图并将其保存到SD和软参考存储器缓存.然而,当我在某些时候使用该应用程序,我开始在LogCat中看到消息,就像下面一样如果我继续,上面的消息将变得更加迫切并且不可避免的应用程序将与OutOfMe

  10. Ajax简单的异步交互及Ajax原生编写

    一提到异步交互大家就会说ajax,仿佛ajax这个技术已经成为了异步交互的代名词.那下面将研究ajax的核心对象

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到<input>中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部