使用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的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
JS实现日期时间动态显示的方法
Dec 07 Javascript
AngularJS入门教程之ng-checked 指令详解
Aug 01 Javascript
浅谈JS中的三种字符串连接方式及其性能比较
Sep 02 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
Sep 29 Javascript
JS数组返回去重后数据的方法解析
Jan 03 Javascript
js实现百度登录框鼠标拖拽效果
Mar 07 Javascript
ES6中class类用法实例浅析
Apr 06 Javascript
详解Node.js实现301、302重定向服务
Apr 07 Javascript
JS排序之冒泡排序详解
Apr 08 Javascript
JavaScript注册时密码强度校验代码
Jun 30 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
Nov 23 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
YB217、YB235、YB400浅听
2021/03/02 无线电
php正则
2006/07/07 PHP
PHP中str_replace函数使用小结
2008/10/11 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
客户端静态页面玩分页
2006/06/26 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
微信小程序 五星评分的实现实例
2017/08/04 Javascript
JavaScript仿微信(电话)联系人列表滑动字母索引实例讲解(推荐)
2017/08/16 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
JS实现星星海特效
2019/12/24 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
python基于phantomjs实现导入图片
2016/05/13 Python
python format 格式化输出方法
2018/07/16 Python
python之mock模块基本使用方法详解
2019/06/27 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
护理专业毕业生自荐书
2014/05/24 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
大学生党性分析材料
2014/12/19 职场文书
创业计划书之服装
2019/10/07 职场文书
Java死锁的排查
2022/05/11 Java/Android