使用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 相关文章推荐
jquery 新浪网易的评论块制作
Jul 01 Javascript
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
Apr 02 Javascript
Bootstrap每天必学之按钮
Nov 26 Javascript
jquery属性,遍历,HTML操作方法详解
Sep 17 Javascript
通过sails和阿里大于实现短信验证
Jan 04 Javascript
老生常谈angularjs中的$state.go
Apr 24 Javascript
Vue.js 单页面多路由区域操作的实例详解
Jul 17 Javascript
Vue.js实现表格渲染的方法
Sep 07 Javascript
在Create React App中启用Sass和Less的方法示例
Jan 16 Javascript
如何用原生js写一个弹窗消息提醒插件
May 24 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 Javascript
JavaScript获取时区实现过程解析
Sep 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多用户读写文件冲突的解决办法
2013/11/06 PHP
php生成图片验证码
2015/06/09 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
2017/03/15 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
web 页面分页打印的实现
2009/06/22 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
vue 路由子组件created和mounted不起作用的解决方法
2019/11/05 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
Python读写文件方法总结
2015/06/09 Python
python实现人民币大写转换
2018/06/20 Python
Python面向对象封装操作案例详解 II
2020/01/02 Python
通过python调用adb命令对App进行性能测试方式
2020/04/23 Python
python集合能干吗
2020/07/19 Python
python 实现单例模式的5种方法
2020/09/23 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
HTML5单页面手势滑屏切换原理分析
2017/07/10 HTML / CSS
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
生产车间实习自我鉴定
2013/09/23 职场文书
采购内勤岗位职责
2013/12/10 职场文书
公司部门司机岗位职责
2014/01/03 职场文书
小学校园活动策划
2014/01/30 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书