2011-01-14 25 views
5

我在使用Prototype編寫的網站上工作,但我們正在將它分階段化爲jQuery。很多頁面更新都是通過Prototype的Ajax.Updater完成的。但是,有時Prototype移除和替換的元素有一個jQuery小部件運行在它們上面,所以$ .cache引用了小部件創建的其他元素。由於jQuery沒有去除DOM,所以當它們被刪除時,它沒有機會清除$ .cache中的數據,最終導致內存泄漏。有沒有辦法告訴jQuery檢查它是$ .cache並放棄不再在DOM中的元素的任何數據?在元素上使用jQuery .data(),然後通過直接DOM操作刪除元素泄漏內存

回答

3

聽起來有點複雜 - 尤其是因爲Ajax.Updater的是的Ajax.Request的專業化這確實有一個的onSuccess /的onComplete回調,這意味着你可能會做緩存的定期檢查,除其他外的東西。這聽起來像比創建一個jQuery的「更新」更多的工作。

如果你願意用jQuery重寫代替updater,這個問題完全消失,而且肯定比解決它更簡單。下面是jQuery中的簡單'更​​新器'。

function update() { 
    $.ajax({ 
     type: 'get', 
     url: 'theContent.html', 
     success: function(text) { 
      // .html calls '.cleanData()' internally. No need to do anything else. 
      $('#updateMe').html(text); 
     } 
    }); 
} 

var i = setInterval(update, 5000); 
+0

既然我們已經運行原型的定製版本,首先,我剛剛更新了原型Object.remove和Object.update功能使用jQuery刪除元素,如果jQuery的存在,從而保證數據的清理。我不想編寫jQuery更新程序,因爲Prototype的Ajax.Updater被用於遍及我們的代碼中太多的地方以在合理的時間內完全替換和測試。 – 2011-01-17 14:33:51