JQuery1.4+ Ajax IE8 内存泄漏问题
并且JQuery1.3.2版本不存在,JQuery1.4+版本存在
通过对比,最终找到这两个版本的其中一个差别
JQuery1.4+在ajax方法增加了一段代码,用于在abort时调用onreadystatechange方法
代码如下:
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
if ( xhr ) {
oldAbort.call( xhr );
}
onreadystatechange();
};
} catch(e) { }
经查,正是此段赋值产生了错误
onreadystatechange的readyState为4,即成功时,将xhr.abort销毁
内存泄漏解决
另:如果直接xhr.abort=null,不知道为什么在IE6下会报错
只好try…catch一下,反正IE6不修正错误与不会有问题
此项问题在IE8中有问题的原因不明
可能是xhr.abort与oldAbort产生了一个闭包?
但为什么IE6不泄漏?
相关推荐
-
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
之前一直都不曾注意到这一点,今天幸亏看了kuibono的文章,下面是kuibono给出的手动回收xmlHttpRequest对象的代码片断: 每次jquery的Ajax请求都会创建一个xmlHttprequest对象,理论上讲,长连接的请求是一个无限递归,请求数量是非常大的,但是由于每次请求都会建立一个新的xmlhttprequest,而且jquery不会自动回收资源,所以导致了内存溢出. 通过查看jquery API,发现jquery还有一个 complete对象,是请求完成后回调函数 (请求
-
容易造成JavaScript内存泄露几个方面
发表于谷歌WebPerf(伦敦WebPerf集团),2014年8月26日. 高效的JavaScript Web应用必须流畅,快速.与用户交互的任何应用程序,都需要考虑如何确保内存有效使用,因为如果消耗过多,页面就会崩溃,迫使用户重新加载.而你只能躲在角落哭泣. 自动垃圾收集是不能代替有效的内存管理的,特别是在大型,长时间运行的Web应用程序中.在这次讲座中,我们将演示如何通过Chrome的DevTools对内存进行有效的管理. 并了解如何解决性能问题,如内存泄漏,频繁的垃圾收集暂停,和整体内
-
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
页面中有个iframe: 复制代码 代码如下: <iframe src='a.html'></iframe> <button>测试IFRAME泄露</button> 其中a.html内容如下: 复制代码 代码如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</t
-
Javascript 闭包引起的IE内存泄露分析
复制代码 代码如下: function fors(){ obj_a = obj_b; obj_b.attr = obj_a; } 复制代码 代码如下: function fors(){ obj_b = {}; obj_b.attr = obj_b; } 上面是两个个很显示的循环引用,IE中产生了内存泄露,由于IE的内存回收机制,导至会长期占用内存而不能释放. 但闭包的内存泄露,有些隐蔽.因为闭包的循环引用,是间接的. 复制代码 代码如下: function iememery(){ var js_
-
权威JavaScript 中的内存泄露模式
作者:Abhijeet Bhattacharya (abhbhatt@in.ibm.com), 系统软件工程师, IBM IndiaKiran Shivarama Shivarama Sundar (kisundar@in.ibm.com), 系统软件工程师, IBM India 2007 年 5 月 28 日 如果您知道内存泄漏的起因,那么在 JavaScript 中进行相应的防范就应该相当容易.在这篇文章中,作者 Kiran Sundar 和 Abhijeet Bhattacharya 将带
-
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
最近一哥们在做一个Ajax长连接的项目,页面需要和服务器保持长连接,而且在连接超时后需要重新请求连接,过程中他问我要用到什么,我也是想都没想就告诉他用jQuery.jQuery不是有ajaxSuccess ajaxError这些对象吗,在请求完成或者请求失败后重新请求不就好了. 但是后来他告诉我说没有用 jQuery,自己手工写的XMLhttprequest .他告诉我说,开始是用jquery写的,而且在测试过程中也没有出现问题.但是在后来无意中发现,在页面开的时候久了之后,浏览器资源竟然占用非
-
js内存泄露的几种情况详细探讨
内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束.在C++中,因为是手动管理内存,内存泄露是经常出现的事情.而现在流行的C#和Java等语言采用了自动垃圾回收方法管理内存,正常使用的情况下几乎不会发生内存泄露.浏览器中也是采用自动垃圾回收方法管理内存,但由于浏览器垃圾回收方法有bug,会产生内存泄露. 1.当页面中元素被移除或替换时,若元素绑定的事件仍没被移除,在IE中不会作出恰当处理,此时要先手工移除事件,不然会存在内存泄露. 复制代码 代码如下: <div id="
-
JQuery Dialog的内存泄露问题解决方法
对于页面来说,JQuery中的Dialog从效果上来说还可以,而且使用简单,只要短短几行绑定的代码就可以实现弹出效果. 代码 复制代码 代码如下: $('#dialog').dialog({ autoOpen: false, width: 600, buttons: { "Ok": function() { $(this).dialog("close"); }, "Cancel": function() { $(this).dialog(&quo
-
jQuery内存泄露解决办法
本文大家分享了jQuery内存泄露解决办法,供大家参考,具体内容如下 思路:为JQuery扩展删除jquery元素对象的方法,大大减轻内存泄露的压力 ;(function($){ if(!$.lui.widget) $.lui.widget = {}; //$.lui.newGuid()生成随机32位id //如果采用此方式多次生成jquery对象的话,html代码字符串会在内存中多次重复,占用额外的内容,也会有泄露.而$("<span></span>").at
-
关于js内存泄露的一个好例子
我把别人的例子改了一下,觉得这样写更紧凑!套用别人的原话,当一个DOM对象包含一个Js对象的引用(例如一个Event Handler), 而这个Js对象又持有对这个DOM对象的引用时,一个环状引用就行成了,于是在ie下就出现了内存泄露.点击"运行代码"并打开任务管理器看内存变化.分别在ie8和ff下测试,差距不用多说. 运行代码 复制代码 代码如下: <html> <head> <title>Memory leak</title>
随机推荐
- AngularJS使用ngOption实现下拉列表的实例代码
- C语言入门之指针用法教程
- Java中断线程的方法
- Python使用面向对象方式创建线程实现12306售票系统
- Python使用scrapy采集时伪装成HTTP/1.1的方法
- asp.net coolite 删除时弹出确定按钮
- PHP中运用jQuery的Ajax跨域调用实现代码
- PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
- PHP使用Mysql事务实例解析
- firefox样式表定义不支持cursor:hand
- 最完的htaccess文件用法收集整理
- JQuery 返回布尔值Is()条件判断方法代码
- JavaScript导航脚本判断当前导航
- C#编程实现发送邮件的方法(可添加附件)
- app 请求服务器json数据实例代码
- vue项目关闭eslint校验
- mysql 8.0.12 简单安装教程
- 使用Vue.observable()进行状态管理的实例代码详解
- 讲解Python3中NumPy数组寻找特定元素下标的两种方法
- layui给下拉框、按钮状态、时间赋初始值的方法