使用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 相关文章推荐
Jquery ThickBox插件使用心得(不建议使用)
Sep 08 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
JavaScript中的console.profile()函数详细介绍
Dec 29 Javascript
jQuery中offset()方法用法实例
Jan 16 Javascript
js去除浏览器默认底图的方法
Jun 08 Javascript
解析预加载显示图片艺术
Dec 05 Javascript
基于JavaScript实现购物车功能
Feb 07 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
用javascript获取任意颜色的更亮或更暗颜色值示例代码
Jul 21 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
vuex如何重置所有state(可定制)
Jan 17 Javascript
vue路由的配置和页面切换详解
Sep 09 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
PHP中常用数组处理方法实例分析
2008/08/30 PHP
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
php对接java现实加签验签的实例
2016/11/25 PHP
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
node.js中的fs.symlinkSync方法使用说明
2014/12/15 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
layer弹出层自定义提交取消按钮的例子
2019/09/10 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
python字典通过值反查键的实现(简洁写法)
2020/09/30 Python
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
约瑟夫·特纳男装:Joseph Turner
2017/10/10 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
个人自我鉴定
2013/11/07 职场文书
小学教育毕业生自荐信
2013/11/18 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
市级文明单位申报材料
2014/05/07 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
大学生村官工作心得体会
2016/01/23 职场文书