Tôi đang sử dụng Backbonejs
và Requirejs
để tạo một ứng dụng web một trang. Có vẻ như ứng dụng của tôi có số memory leaks
.vấn đề rò rỉ bộ nhớ trong Ứng dụng Backbonejs
Để thử nghiệm, tôi đã tạo mã mẫu. Nó tạo ra một đối tượng xem, gọi hàm render
của nó và đính kèm trả lại html
vào DOM
.
Trả lại html
có button
. Sau khi nhấp vào nút, chức năng callback
gọi destroy
của nó trong đó chế độ xem bị hủy.
Tuy nhiên, khi tôi chạy chrome heap profilier
, tôi có thể thấy detached DOM tree
vẫn treo xung quanh. Nhìn sâu vào nó, người ta có thể thấy references
được giữ bởi jQuery
.
Tôi nghi ngờ đây có phải là rò rỉ bộ nhớ hay không. Nếu có mycode không giữ bất kỳ tham chiếu nào. Vì vậy, vấn đề nằm ở jQuery
?
Đây là link để lấy mẫu mã.
Tôi cũng đã đính kèm ảnh chụp màn hình của ảnh chụp nhanh heap.
Như một lời khuyên chung: khi đối phó với loại vấn đề này, hãy cố gắng cách ly từng phần tử: loại bỏ requirejs để bạn có ít mảnh hơn để xử lý trong khi gỡ lỗi. Một lời khuyên khác là nâng cấp lên Backbone 1.0.0 và sử dụng các hàm 'listenTo' và' stopListening' mới, đã được giới thiệu chính xác để xử lý các loại vấn đề này. Hãy nhớ rằng việc gọi 'remove' trên một View cũng sẽ gọi là' stopListening'. – namero999
@gustavohenke xương sống không có bất kỳ vấn đề với rò rỉ bộ nhớ. chúng được tạo bởi các nhà phát triển :) –
Nếu bạn gặp vấn đề về bộ nhớ, hãy bắt đầu xem xét vị trí của tất cả các trình xử lý của bạn ... có thể có một số trình xử lý được đặt ngầm định bởi chế độ xem của bạn mà loại bỏ không xử lý. – adrian