使用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 相关文章推荐
Chrome中模态对话框showModalDialog返回值问题的解决方法
May 25 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
Feb 06 Javascript
用JS做的简单的可折叠的两级树形菜单
Sep 21 Javascript
Node.js与PHP、Python的字符处理性能对比
Jul 06 Javascript
JavaScript插件化开发教程 (二)
Jan 27 Javascript
JavaScript原型及原型链终极详解
Jan 04 Javascript
Node.js 8 中的重要新特性
Jun 28 Javascript
React-intl 实现多语言的示例代码
Nov 03 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
Oct 11 Javascript
JavaScript ES6中的简写语法总结与使用技巧
Dec 30 Javascript
浅谈JavaScript闭包
Apr 09 Javascript
JavaScript中Dom操作实例详解
Jul 08 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更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
js的with语句使用方法
2007/09/21 Javascript
JavaScript中函数声明优先于变量声明的实例分析
2012/03/01 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
JavaScript自定义文本框光标
2017/03/05 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
跟老齐学Python之编写类之三子类
2014/10/11 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python调用matplotlib模块绘制柱状图
2019/10/18 Python
北美女性服装零售连锁店:maurices
2019/06/12 全球购物
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
20年同学聚会邀请函
2014/02/04 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
中学生检讨书范文
2014/11/03 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
六年级学生评语大全
2014/12/26 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
2016春节慰问信范文
2015/03/25 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Html5大屏数据可视化开发的实现
2021/06/11 HTML / CSS
Python中time与datetime模块使用方法详解
2022/03/31 Python
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android
Python简易开发之制作计算器
2022/04/28 Python