使用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 arguments 多参传值函数
Oct 24 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
详解Javascript继承的实现
Mar 25 Javascript
JQuery Mobile 弹出式登录框的实现方法
May 28 Javascript
分享jQuery网页元素拖拽插件
Dec 01 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
Nov 18 Javascript
Bootstrap CSS组件之按钮下拉菜单
Dec 17 Javascript
Vue中如何实现轮播图的示例代码
Jul 27 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 Javascript
Node.js使用cookie保持登录的方法
May 11 Javascript
vant时间控件使用方法详解
Dec 24 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常用Output和ptions/Info函数集介绍
2013/06/19 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
微信第三方登录(原生)demo【必看篇】
2017/05/26 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
NodeJS实现视频转码的示例代码
2017/11/18 NodeJs
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
js+canvas实现转盘效果(两个版本)
2020/09/13 Javascript
ES11屡试不爽的新特性,你用上了几个
2020/10/21 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Python中__call__用法实例
2014/08/29 Python
python写的一个squid访问日志分析的小程序
2014/09/17 Python
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python控制台中实现进度条功能
2015/11/10 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
详解Python正则表达式re模块
2019/03/19 Python
详解Python装饰器
2019/03/25 Python
新奇的小玩意:IWOOT
2016/07/21 全球购物
老海军美国官网:Old Navy
2016/09/05 全球购物
Ticketmaster意大利:音乐会、节日、艺术和剧院的官方门票
2019/12/23 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
单位接收函范文
2015/01/30 职场文书
埃及王子观后感
2015/06/16 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
用几道面试题来看JavaScript执行机制
2021/04/30 Javascript
Java 定时任务技术趋势简介
2022/05/04 Java/Android