使用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 相关文章推荐
学习ExtJS border布局
Oct 08 Javascript
window.js 主要包含了页面的一些操作
Dec 23 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
Mar 28 Javascript
web基于浏览器的本地存储方法应用
Nov 27 Javascript
location对象的属性和方法应用(解析URL)
Apr 12 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
Aug 26 Javascript
常用的javascript设计模式
Jan 11 Javascript
js设置默认时间跨度过程详解
Jul 17 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
vue更改数组中的值实例代码详解
Feb 07 Javascript
node.js使用express-fileupload中间件实现文件上传
Jul 16 Javascript
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
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 JS Ip地址及域名格式检测代码
2013/09/27 PHP
Codeigniter购物车类不能添加中文的解决方法
2014/11/29 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
jQuery瀑布流插件Wookmark使用实例
2014/04/02 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
python 默认参数问题的陷阱
2016/02/29 Python
python文件的md5加密方法
2016/04/06 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
详解查看Python解释器路径的两种方式
2020/10/15 Python
手对手的教你用canvas画一个简单的海报的方法示例
2018/12/10 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
J2EE模式面试题
2016/10/11 面试题
九年级历史教学反思
2014/01/27 职场文书
售后客服工作职责
2014/06/16 职场文书
公证书格式
2015/01/23 职场文书
公司会议开幕词
2015/01/29 职场文书
村官个人总结范文
2015/03/03 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers