最近目前做的系统页面内存严重泄漏,研究发现主要是jquery框架引起,主要几个泄漏点:
1.jquery.1.7.2.min.js每次加载大概400K,如果是作为一个iframe的话,点菜单,不停切或页面刷新会不断增涨.
解决办法:找到一个jquery.1.7.1.js或jquery.1.8.2.min.js这个版本不会泄漏.
2.jquery-ui.1.8.2.custom.js泄漏更严重,每次大概泄漏6-7M,刷几下系统就动不了.
解决办法:同样,找到一个不泄漏的版本jquery-ui.1.7.2.js这个版本不会泄漏.
存在问题:不过存的在问题是它与jquery.1.7.1配合使用会有dialog的beforeclose的事件与其它版本beforeClose区别C是小写,别外日期控件点也弹不出来选择日期表,这个暂时还没分析原因,用的时候注意一下.
3.jqGrid.min.js表格刷数据也会泄漏,我们是5秒调一次$("#dataTB").trigger('reloadGrid');这个不断刷数据.放一个晚上大概泄漏上80M.
原因:分析发现是reloadGrid这个方法每次都是调ajax从服务器拿数据刷新表格,原以为是ajax引起的,后来发现是操作DOM引起,拿到数据后,一个个tr写进来,如果表格是100行就要写100次,严重泄漏.
解决办法:修改jqGrid.min.js里面的ka方法,里面有一个循环将$("b ..tbody:first").append(H.jion(""));改为在for里只给一个临时字符串,for完后再一次写,减少操作次数据,内存泄漏从100M减到1M的效果,相当明显。
1.jquery.1.7.2.min.js每次加载大概400K,如果是作为一个iframe的话,点菜单,不停切或页面刷新会不断增涨.
解决办法:找到一个jquery.1.7.1.js或jquery.1.8.2.min.js这个版本不会泄漏.
2.jquery-ui.1.8.2.custom.js泄漏更严重,每次大概泄漏6-7M,刷几下系统就动不了.
解决办法:同样,找到一个不泄漏的版本jquery-ui.1.7.2.js这个版本不会泄漏.
存在问题:不过存的在问题是它与jquery.1.7.1配合使用会有dialog的beforeclose的事件与其它版本beforeClose区别C是小写,别外日期控件点也弹不出来选择日期表,这个暂时还没分析原因,用的时候注意一下.
3.jqGrid.min.js表格刷数据也会泄漏,我们是5秒调一次$("#dataTB").trigger('reloadGrid');这个不断刷数据.放一个晚上大概泄漏上80M.
原因:分析发现是reloadGrid这个方法每次都是调ajax从服务器拿数据刷新表格,原以为是ajax引起的,后来发现是操作DOM引起,拿到数据后,一个个tr写进来,如果表格是100行就要写100次,严重泄漏.
解决办法:修改jqGrid.min.js里面的ka方法,里面有一个循环将$("b ..tbody:first").append(H.jion(""));改为在for里只给一个临时字符串,for完后再一次写,减少操作次数据,内存泄漏从100M减到1M的效果,相当明显。