Tôi biết rằng không dễ để quản lý bộ nhớ một cách chính xác bên trong một ứng dụng có nhiều phần tử giao diện người dùng và hoàn toàn dựa trên Ajax (trong ứng dụng của tôi các trang không bao giờ được tải lại). Nhưng tôi muốn hiểu hành vi sau đây:jQuery.remove(), tách các phần tử DOM, nhưng tôi vẫn có thể truy cập các phần tử từ mã. Làm thế nào để tránh rò rỉ?
Tôi có phần tử gốc mà phần tử con duy nhất phải được đính kèm (nghĩ rằng nó là phần tử gốc là vùng chứa ứng dụng và các trang con). Bất cứ khi nào tôi chuyển đổi giữa nội dung con, tôi xóa nội dung trước đó bằng jQuery.remove(), nhưng tôi thấy rằng nội dung thực sự bị tách khỏi DOM nhưng nội dung đó vẫn còn trong bộ nhớ.
- gốc và hai nội dung trẻ em (child1 và child2)
- từ child1 tôi chuyển sang child2, yêu cầu quản lý ứng dụng của tôi để loại bỏ child1 trước khi gắn child2
- child2 đang được đính kèm (tôi có thể nhìn thấy nó) nhưng tôi vẫn có thể sử dụng các yếu tố child1 từ mã quản lý child1
đang child1 (nắm giữ tham chiếu đến child1 DOM):
function testaccess(){
load_and_remove(child2);
var child1DOM = get_this_dom();
}
child1DOM vẫn ở đó và tôi có thể thao tác nó như thể nó vẫn được gắn với DOM. Ok, tôi cho rằng jQuery.remove() và GC sẽ không thể giải phóng bộ nhớ cho đến khi tôi có mã sẽ truy cập nó, nhưng ngay cả khi tôi không gọi get_this_dom(), ngay cả sau khi thoát khỏi testaccess(), Tôi thấy rằng bộ nhớ FF không giảm ...
Tôi tự hỏi làm thế nào để làm cho GC phát hành tất cả bộ nhớ, khi tôi thoát child1.
một cái nhìn nhanh chóng về quyền "liên quan" câu hỏi liên kết cho thấy một trường hợp tương tự -> http://stackoverflow.com/q/768621/104380 – vsync