Tôi dường như có một số rò rỉ bộ nhớ khá lớn trong ứng dụng mà tôi đang làm việc. Bản thân ứng dụng không phải là rất phức tạp. Cứ sau 15 giây, trang yêu cầu xấp xỉ 40kb JSON từ máy chủ và vẽ một bảng trên trang bằng cách sử dụng nó. Sẽ rẻ hơn khi vẽ bảng vì dữ liệu thường luôn mới. Tôi đính kèm một vài sự kiện vào bảng, khoảng 5 mỗi dòng, 30 dòng trong bảng. Tôi đã sử dụng phương thức .html() của jQuery để đưa html mới vào thùng chứa và ghi đè lên hiện tại. Tôi làm điều này đặc biệt để các chức năng dọn dẹp đặc biệt của jQuery đi vào và cố gắng tách tất cả các sự kiện trên các phần tử trong phần tử mà nó ghi đè lên. Sau đó tôi cũng xóa các biến lớn của html khi chúng được gửi đến DOM bằng cách sử dụng delete my_var
.Ứng dụng JS nặng của Ajax sử dụng quá nhiều bộ nhớ theo thời gian
Tôi đã kiểm tra các tham chiếu vòng tròn và các sự kiện được đính kèm không bao giờ bị xóa một vài lần, nhưng không bao giờ thực sự khai thác nó. Tôi đã tự hỏi nếu ai đó có thể cho tôi một vài gợi ý về cách tối ưu hóa một ứng dụng rất nặng như thế này. Tôi chỉ chọn "Hiệu suất cao Javascript" của Nicholas Zakas, nhưng không có nhiều thời gian để tham gia vào nó.
Để đưa ra ý tưởng về dung lượng bộ nhớ này đang sử dụng, sau 4 ~ giờ, nó đang sử dụng khoảng 420.000k trên chrome và nhiều hơn nữa trên Firefox hoặc IE.
Cảm ơn!
Để nhận được câu trả lời hữu ích, có thể bạn sẽ cần cung cấp mẫu mã để tái tạo sự cố. –
Sẽ phải xem mã để hữu ích hơn. Nếu nó xảy ra trong FF * thì có khả năng là do các tài nguyên không được phát hành hoặc ngữ cảnh thực thi *. Các phiên bản cũ hơn của IE là (nhiều hơn) dễ bị "không phù hợp với đối tượng suốt đời" giữa DOM và JS engine. Hãy nhớ rằng, ngay cả khi bạn đặt lại dữ liệu trong ngữ cảnh thực thi, bạn vẫn chưa giết ngữ cảnh thực thi! (Nó thực sự là một lỗi nếu trình duyệt không phát hành các sự kiện của các phần tử bị loại bỏ khỏi DOM.) Lỗi này nghe có vẻ thú vị, vui lòng cập nhật với (tối thiểu) test-case :-) –
Tôi sẽ cố gắng xây dựng một JS đơn giản tệp hiển thị cùng các triệu chứng. –