使用jQuery Ajax功能时需要注意的一个问题(内存溢出)


Posted in Javascript onMay 30, 2012

最近一哥们在做一个Ajax长连接的项目,页面需要和服务器保持长连接,而且在连接超时后需要重新请求连接,过程中他问我要用到什么,我也是想都没想就告诉他用jQuery。jQuery不是有ajaxSuccess ajaxError这些对象吗,在请求完成或者请求失败后重新请求不就好了。

但是后来他告诉我说没有用 jQuery,自己手工写的XMLhttprequest 。他告诉我说,开始是用jquery写的,而且在测试过程中也没有出现问题。但是在后来无意中发现,在页面开的时候久了之后,浏览器资源竟然占用非常高导致内存不足而崩溃了。后来抓包分析发现,每次jquery的Ajax请求都会创建一个xmlHttprequest对象,理论上讲,长连接的请求是一个无限递归,请求数量是非常大的,但是由于每次请求都会建立一个新的xmlhttprequest,而且jquery不会自动回收资源,所以导致了内存溢出。

通过查看jquery API,发现jquery还有一个 complete对象,是请求完成后回调函数 (请求成功或失败之后均调用)。 同时有两个参数XMLHttpRequest, textStatus。所以,我们只需要在请求完成后,将传回的XMLHttprequest对象手工回收即可,代码如下:

$.ajax({ 
url: "https://3water.com", 
data: { name: "xxxx" }, 
dataType: "xml", 
success: function (data, textStatus) { 
//do something... 
}, 
complete: function (XHR, TS) { XHR = null } 
});
Javascript 相关文章推荐
JS基础之undefined与null的区别分析
Aug 08 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
Mar 07 Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 Javascript
js+html5实现canvas绘制简单矩形的方法
Jun 05 Javascript
jquery+html5烂漫爱心表白动画代码分享
Aug 24 Javascript
深入探讨javascript函数式编程
Oct 11 Javascript
jQuery+ajax实现文章点赞功能的方法
Dec 31 Javascript
JS动态添加选项案例分析
Oct 17 Javascript
jQuery中绑定事件bind() on() live() one()的异同
Feb 23 Javascript
Vue和React组件之间的传值方式详解
Jan 31 Javascript
javascript事件监听与事件委托实例详解
Aug 16 Javascript
vue 全局封装loading加载教程(全局监听)
Nov 05 Javascript
Chosen 基于jquery的选择框插件使用方法
May 30 #Javascript
基于jquery的鼠标拖动效果代码
May 30 #Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
May 30 #Javascript
基于jQuery的倒计时实现代码
May 30 #Javascript
基于jquery的放大镜效果
May 30 #Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 #Javascript
Javascript的常规数组和关联数组对比小结
May 24 #Javascript
You might like
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
lib.utf.js
2007/08/21 Javascript
JavaScript 全角转半角部分
2009/10/28 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
jquery基础教程之数组使用详解
2014/03/10 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jQuery实现的小图列表,大图展示效果幻灯片示例
2016/10/25 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
node.js爬取中关村的在线电瓶车信息
2018/11/13 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
react同构实践之实现自己的同构模板
2019/03/13 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
使用Python解析JSON数据的基本方法
2015/10/15 Python
对Python中内置异常层次结构详解
2018/10/18 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
祖国在我心中演讲稿600字
2014/05/04 职场文书
2014年村委会工作总结
2014/11/24 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
趣味运动会加油词
2015/07/18 职场文书
职工宿舍管理制度
2015/08/05 职场文书