使用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 相关文章推荐
js 动态为textbox添加下拉框数据源的方法
Apr 24 Javascript
一个很有趣3D球状标签云兼容IE8
Aug 22 Javascript
Yii2使用Bootbox插件实现自定义弹窗
Apr 02 Javascript
JavaScript数组迭代器实例分析
Jun 09 Javascript
Ionic如何实现下拉刷新与上拉加载功能
Jun 03 Javascript
深入理解js generator数据类型
Aug 16 Javascript
canvas绘制环形进度条
Feb 23 Javascript
JavaScript之排序函数_动力节点Java学院整理
Jun 30 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
Aug 31 Javascript
JavaScript登录验证基础教程
Nov 01 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
vue 点击按钮实现动态挂载子组件的方法
Sep 07 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
一个用于网络的工具函数库
2006/10/09 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP实现的曲线统计图表示例
2016/11/10 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
jQuery插件FusionCharts绘制2D柱状图和折线图的组合图效果示例【附demo源码】
2017/04/10 jQuery
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
2017/06/12 jQuery
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
Python抽象类的新写法
2015/06/18 Python
win10系统中安装scrapy-1.1
2016/07/03 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
python去掉空白行的多种实现代码
2018/03/19 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
计算机本科生自荐信
2013/10/15 职场文书
儿子婚宴答谢词
2014/01/09 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
2014年母亲节寄语
2014/05/07 职场文书
2014年群众路线党员自我评议
2014/09/24 职场文书
一年级小学生评语大全
2014/12/25 职场文书
2015年仓库管理员工作总结
2015/04/21 职场文书
Go语言入门exec的基本使用
2022/05/20 Golang
基于Python实现nc批量转tif格式
2022/08/14 Python