解决$.post中的Javascript/jQuery内存泄漏问题
Resolving Javascript/jQuery memory leak issues in $.post
我有一个内存泄漏的问题,我试图在一个webapp中跟踪,使用jQuery-1.7.1。该应用程序正在向服务器发出POST请求,以使用精心设计的表单检索一些搜索结果。在我删除了大部分js代码(出于泄漏跟踪的目的)之后,裸函数看起来像这样:
$(function() {
// bind the search action
$('#search-button').unbind('click').click(function() { doSearch(); });
});
function doSearch() {
// get the query string from the search form
var query = $('#search-form').serialize();
// perform search and render results
$.post('/search', query, function(data){
// nothing here now (trying to debug)
data = null;
}, 'json');
query = null;
}
我可以看到,每次点击搜索按钮时,内存消耗都会累积额外的~1MB,尽管实际上它什么也不做。这是一个真正的问题,因为应用程序有一个"自动刷新"搜索模式,在那里调用大约每分钟一次,所以如果保持激活状态,它会在一段时间后阻塞浏览器。
从服务器返回的data
对象包含一个表示成功/失败的布尔值,以及一个要渲染的html字符串(如果成功的话相当大,大约1Mb左右):
data = {
success : true/false,
html : "<div id='results'>.....</div>"
}
由于我在回调的实际主体中没有执行任何操作,我怀疑这个data
没有从作用域中消除,而是聚集在内存中。我试过在回调结束时将其设置为null
,但这并没有奏效。这在chrome和firefox(两者的早期和最新版本)上进行了测试。我错过什么了吗?有什么想法会有帮助的,谢谢。
确实没有可靠的方法来强制javascript进行垃圾收集。
您可以尝试将这一行添加到另一行中以释放内存:
query = null;
delete query;
JSON格式需要每个键都有引号
试
data = {
"success" : true/false,
"html" : "<div id='results'>.....</div>"
}
我说的是服务器端字符串输出
相关文章:
- jQuery Draggable:内存泄漏
- 避免将jquery选择器作为构造函数参数发送时内存泄漏
- 是JavaScript(jQuery)和一个处理程序,每次从内存运行或读取
- jquery fadeIn/Out,自定义幻灯片放映故障,淡入淡出内存?淡入淡出队列
- 使用 jQuery / .data() 避免内存泄漏
- JQuery 删除和内存泄漏
- jQuery:新的临时 DOM 元素的内存管理
- 避免使用 jquery 创建和删除 DOM 的对象发生内存泄漏
- JQuery 选项卡在 Firefox 扩展中创建内存泄漏
- IE(any)和Firefox中的内存不足错误,当尝试从父文档包含jQuery时
- 使用JQuery/JavaScript导致内存泄漏的常见方法有哪些?
- 是否可以将一组类存储在内存中,以便我可以在页面上显示它们之前对它们执行操作?(JQuery)
- jQuery $.post() (AJAX) 会导致内存泄漏
- 在函数中创建 jQuery 对象然后不使用它是否会产生内存泄漏
- 导致内存泄漏的 jQuery 代码
- 用作 Jquery 回调时匿名函数与命名函数的内存开销
- 如何在使用js/jquery加载图像后获得图像大小(内存)
- 使用复选框删除本地内存中存储的项目Jquery
- 有类似Jquery内存或缓存的东西吗
- 解决$.post中的Javascript/jQuery内存泄漏问题