使用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 相关文章推荐
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
Jul 11 Javascript
jQuery Ajax文件上传(php)
Jun 16 Javascript
js获取select标签选中值的两种方式
Jan 09 Javascript
php实例分享之实现显示网站运行时间
May 20 Javascript
javascript数组去重方法终极总结
Jun 05 Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 Javascript
Angularjs分页查询的实现
Feb 24 Javascript
jQuery EasyUI之验证框validatebox实例详解
Apr 10 jQuery
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
vue中使用mxgraph的方法实例代码详解
May 17 Javascript
vue远程加载sfc组件思路详解
Dec 25 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中常用编辑器推荐
2007/01/02 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
jQuery 限制输入字符串长度
2016/06/20 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
小程序按钮避免多次调用接口和点击方案实现(不用showLoading)
2020/04/15 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
Python日期操作学习笔记
2008/10/07 Python
Python3使用requests发闪存的方法
2016/05/11 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
Django在win10下的安装并创建工程
2017/11/20 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Flask之flask-script模块使用
2018/07/26 Python
Python根据成绩分析系统浅析
2019/02/11 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
微博营销计划书
2014/01/10 职场文书
大学生未来职业生涯规划书
2014/02/15 职场文书
社会实践活动总结报告
2014/04/29 职场文书
2014年教研组工作总结
2014/11/26 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
讲座开场白台词和结束语
2015/05/29 职场文书
创业计划书之书店
2019/09/10 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js
python实现的web监控系统
2021/04/27 Python
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers