Cuốn sách Learning jQuery nói IE có rò rỉ bộ nhớ cho đối tượng DOM có một tài sản tham khảo một chức năng, và các chức năng cũng tham khảo các đối tượng DOM, do đó có một "tham chiếu vòng tròn", như thế này:Trong Internet Explorer, tại sao bộ nhớ bị rò rỉ ở lại, ngay cả khi điều hướng khỏi các trang?
onload = function() {
var foo = document.getElementById('foo');
foo.onclick = function() { // DOM object foo's onclick property refers to a function
foo.innerHTML = "hello" // the function's body refers to the DOM object
} // therefore circular reference
}
IE có thể xử lý các tham chiếu vòng tròn để thu thập rác, nhưng không phải khi tham chiếu vòng tròn liên quan đến cả đối tượng DOM và đối tượng Javascript, bởi vì chúng được xử lý bởi các trình quản lý bộ nhớ khác nhau.
và:
[rò rỉ bộ nhớ ... và] kết quả [tham khảo] vòng lặp không thể được phát hành bởi IE ngay cả khi chúng tôi di chuyển ra khỏi trang.
không bao giờ được giải phóng cho đến khi trình duyệt bị đóng.
Có đúng không? Tại sao IE không giải phóng bộ nhớ đó ngay cả khi người dùng rời khỏi trang? Có phải vì người dùng có thể nhấp vào Back
và quay lại trang và IE có muốn giữ trạng thái của trang không? Trong trường hợp đó, điều gì xảy ra nếu người dùng ở trên trang rò rỉ bộ nhớ, sau đó nhấp vào Back
và sau đó chuyển đến google.com? Sau đó, trang không thể xem được bởi bất kỳ Back
hoặc Forward
nào và sự cố rò rỉ bộ nhớ có thể biến mất mà không đóng trình duyệt?
Hoặc ngay cả khi tab được đóng, mà không đóng trình duyệt?
Loại rò rỉ bộ nhớ này có xảy ra trong IE 8 không?
Nhiều chương trình có vấn đề với rò rỉ bộ nhớ; và trong khi nhiều rò rỉ bộ nhớ đã được cắm trong các phiên bản IE mới hơn, thật khó để cắm tất cả chúng vào một dự án có kích thước này. – Piskvor