Tôi chưa gặp sự cố rò rỉ bộ nhớ trong ứng dụng của mình, nhưng tôi lo lắng về các sự cố có thể xảy ra trong tương lai. Tôi muốn biết nếu bạn làm điều gì đó như thế này:Trình xử lý sự kiện, bao đóng và thu gom rác trong Javascript
SomeClass.prototype.someMethod= function() {
var that= this
this.$div2.click(function() {
that.someMethod2();
});
}
Và giả sử điều này. $ Div2 được thêm vào div khác. $ Div1. Nếu tôi gọi
this.$div1.remove();
và sau đó mất tham chiếu của cá thể SomeClass của tôi, ví dụ SomeClass có bị thu gom rác không? Và điều gì về phần tử HTML này. $ Div2? điều này. $ div2 sẽ không nằm trong DOM vì nó được nối vào nó. $ div1.
Tôi hỏi điều này vì trình xử lý sự kiện trong này. $ Div2 có thể giữ tham chiếu đến phần tử HTML này. $ Div2 và cũng giữ tham chiếu đến thể hiện của SomeClass thông qua việc đóng vì biến "đó".
Vì vậy, tôi nên quan tâm đến việc xóa đúng tất cả các sự kiện và các phần tử HTML như thế này? Hoặc đơn giản là xóa phần tử "root" (điều này. $ Div1) giải quyết được vấn đề?
Tôi nghĩ điều đó sẽ xảy ra. Các nhà sưu tập rác nên theo dõi các tài liệu tham khảo, do đó, trong lý thuyết thời điểm tài liệu tham khảo cuối cùng biến mất, mục này phải là một ứng cử viên cho việc thu gom rác thải. Tôi tự hỏi nếu những người trong JS động cơ (s) cũng có thể phân tích mã unreachable và đánh dấu các mục vẫn còn có tài liệu tham khảo nhưng có tài liệu tham khảo là không sử dụng ... – RonaldBarzell
Nó phụ thuộc. Với một webapp cổ điển, điều này không thực sự là một vấn đề, vì bạn thường xuyên gửi đến máy chủ, tải hoặc làm mới một chế độ xem khác. Với các ứng dụng trang đơn mới nổi, điều này có thể là một vấn đề, đặc biệt là với các trình duyệt 'đã chết' như IE. – asgoth
@asgoth Tôi đang tạo một ứng dụng trang đơn. Một trong đó phải chạy đáng tin cậy trong ít nhất 12 giờ mà không làm mới trang, do đó lo lắng của tôi về việc thu gom rác thải. – Hoffmann