使用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 相关文章推荐
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
Oct 29 Javascript
另一个javascript小测验(代码集合)
Jul 27 Javascript
利用JS进行图片的切换即特效展示图片
Dec 03 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
May 21 Javascript
angularjs 处理多个异步请求方法汇总
Jan 06 Javascript
jQuery实现设置、移除文本框默认值功能
Jan 13 Javascript
简单谈谈node.js 版本控制 nvm和 n
Oct 15 Javascript
深入浅出ES6之let和const命令
Aug 25 Javascript
Jquery EasyUI $.Parser
Jun 02 jQuery
webpack4 处理CSS的方法示例
Sep 03 Javascript
Vue监听滚动实现锚点定位(双向)示例
Nov 13 Javascript
element-ui中el-upload多文件一次性上传的实现
Dec 02 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源代码数组统计count分析
2011/08/02 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
一个对于Array的简单扩展
2006/10/03 Javascript
Javascript SHA-1:Secure Hash Algorithm
2006/12/20 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
Javascript实现打鼓效果
2021/01/29 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
Python实现学生成绩管理系统
2020/04/05 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
使用Pandas对数据进行筛选和排序的实现
2019/07/29 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
2020/04/07 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
matplotlib bar()实现百分比堆积柱状图
2021/02/24 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
投标承诺书怎么写
2014/05/24 职场文书
中标通知书范本
2015/04/17 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript