使用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 KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
JavaScript和JQuery实用代码片段(一)
Apr 07 Javascript
ajax更新数据后,jquery、jq失效问题
Mar 16 Javascript
基于JQuery的多标签实现代码
Sep 19 Javascript
侧栏跟随滚动的简单实现代码
Mar 18 Javascript
jquery对象和DOM对象的区别介绍
Aug 09 Javascript
js实现获取当前时间是本月第几周的方法
Aug 11 Javascript
JavaScript如何禁止Backspace键
Dec 02 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
Oct 17 Javascript
js正则相关知识点专题
May 10 Javascript
Vue-input框checkbox强制刷新问题
Apr 18 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
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/07/22 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
2013/04/26 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
使用js复制链接中的部分文字的方法
2015/07/30 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
Django中几种重定向方法
2015/04/28 Python
Python赋值语句后逗号的作用分析
2015/06/08 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
对Python 内建函数和保留字详解
2018/10/15 Python
python3中eval函数用法使用简介
2019/08/02 Python
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
婴儿地球:Baby Earth
2018/12/25 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
护士求职自荐信范文
2014/03/19 职场文书
班主任经验交流会主持词
2014/04/01 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
中学生检讨书1000字
2014/10/28 职场文书
2019年入党思想汇报
2019/03/25 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python