$.cache
kích thước theo giá trị khuôn mặt không cho biết bất kỳ điều gì về rò rỉ bộ nhớ. Nó có thể rất nhỏ và vẫn có rò rỉ bộ nhớ, hoặc nó có thể rất lớn và không có bất kỳ rò rỉ bộ nhớ nào.
Nếu bạn biết bạn có 10 trình xử lý sự kiện bị ràng buộc với jQuery trên trang tại một thời điểm, và chưa $.cache
có mục nhập để biết thêm, thì bạn biết bạn đang bị rò rỉ.
Trình tiết kiệm bộ nhớ lớn là sử dụng tính năng ủy quyền sự kiện thay vì gắn trình xử lý sự kiện vào từng phần tử riêng lẻ.
Say:
<ul>
<li></li>
<li></li>
<li></li>
</ul>
$("li").on("click", fn)
sẽ đính kèm 3 xử lý sự kiện cá nhân (thêm, nếu bạn có nhiều li của khóa học), trong khi $("ul").on("click", "li", fn)
sẽ đính kèm chỉ là một bất kể có bao nhiêu li-yếu tố mà bạn có và chưa có cùng một kết quả.
Ví dụ về rò rỉ:
$("button").click(function() {
$("#target")[0].innerHTML = "";
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/1/
Lý do được rằng .innerHTML được sử dụng, mà không phải là một phần của jQuery vì vậy nó không thể làm sạch.
Fix là sử dụng phương pháp jQuery cho cùng:
$("button").click(function() {
$("#target").html("");
$("<div>").appendTo($("#target")).click($.noop);
$("#log").text(Object.keys($.cache).length);
});
http://jsfiddle.net/SGZW4/2/
Nó không phải về cách lớn đó là, nhưng làm thế nào nó phát triển theo thời gian. Nếu bộ nhớ cache không bị chặn (tức là tăng mãi mãi), bạn có thể bị rò rỉ bộ nhớ. –
jQuery thực sự là trình duyệt tương thích. Nó mang đến cho IE vấn đề xử lý đúng các yếu tố cho tất cả các trình duyệt. –
Bạn sẽ bị đẩy mạnh để hạn chế khả năng bộ nhớ hiện đại nếu bạn hợp lý. Trừ khi tất nhiên bạn tạo ra một rò rỉ bộ nhớ đủ lớn. Không có lượng bộ nhớ ảo, tất cả phụ thuộc vào phần cứng của người dùng. Bạn có quan tâm đến những người sử dụng máy tính từ những năm 90 không? –