JQuery1.4+ Ajax IE8 內(nèi)存泄漏問題
更新時間:2010年10月15日 18:18:42 作者:
將JQuery1.2.6升級到JQuery1.4,有幾天下班沒有關(guān)閉ajax輪詢網(wǎng)頁,第二天早上來,內(nèi)存耗盡,發(fā)現(xiàn)此內(nèi)存泄漏在IE6上不存在(IE7未測試),IE8上存在
并且JQuery1.3.2版本不存在,JQuery1.4+版本存在
通過對比,最終找到這兩個版本的其中一個差別
JQuery1.4+在ajax方法增加了一段代碼,用于在abort時調(diào)用onreadystatechange方法
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
if ( xhr ) {
oldAbort.call( xhr );
}
onreadystatechange();
};
} catch(e) { }
經(jīng)查,正是此段賦值產(chǎn)生了錯誤
onreadystatechange的readyState為4,即成功時,將xhr.abort銷毀
內(nèi)存泄漏解決
另:如果直接xhr.abort=null,不知道為什么在IE6下會報錯
只好try…catch一下,反正IE6不修正錯誤與不會有問題
此項問題在IE8中有問題的原因不明
可能是xhr.abort與oldAbort產(chǎn)生了一個閉包?
但為什么IE6不泄漏?
通過對比,最終找到這兩個版本的其中一個差別
JQuery1.4+在ajax方法增加了一段代碼,用于在abort時調(diào)用onreadystatechange方法
復(fù)制代碼 代碼如下:
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
if ( xhr ) {
oldAbort.call( xhr );
}
onreadystatechange();
};
} catch(e) { }
經(jīng)查,正是此段賦值產(chǎn)生了錯誤
onreadystatechange的readyState為4,即成功時,將xhr.abort銷毀
內(nèi)存泄漏解決
另:如果直接xhr.abort=null,不知道為什么在IE6下會報錯
只好try…catch一下,反正IE6不修正錯誤與不會有問題
此項問題在IE8中有問題的原因不明
可能是xhr.abort與oldAbort產(chǎn)生了一個閉包?
但為什么IE6不泄漏?
您可能感興趣的文章:
- IE下使用jQuery重置iframe地址時內(nèi)存泄露問題解決辦法
- jquery不會自動回收xmlHttpRequest對象 導(dǎo)致了內(nèi)存溢出
- 使用jQuery Ajax功能時需要注意的一個問題(內(nèi)存溢出)
- JQuery Dialog的內(nèi)存泄露問題解決方法
- js內(nèi)存泄露的幾種情況詳細探討
- Javascript 閉包引起的IE內(nèi)存泄露分析
- 容易造成JavaScript內(nèi)存泄露幾個方面
- 權(quán)威JavaScript 中的內(nèi)存泄露模式
- 關(guān)于js內(nèi)存泄露的一個好例子
- jQuery內(nèi)存泄露解決辦法
相關(guān)文章
jQuery模擬下拉框選擇對應(yīng)菜單的內(nèi)容
這篇文章主要介紹了jQuery模擬下拉框選擇對應(yīng)菜單的內(nèi)容,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03