2010-01-26 32 views

Trả lời

21

Về tiêu thụ bộ nhớ

rò rỉ bộ nhớ trong JavaScript thường được bỏ qua trừ khi họ biến thành rò rỉ bộ nhớ trình duyệt (có nghĩa là, ngay cả sau khi người dùng điều hướng ra khỏi trang, bộ nhớ tiếp tục được cấp phát và không có cách nào để giải phóng nó). Lý do cho điều này là trong khi ứng dụng web của bạn có thể có một số rò rỉ bộ nhớ, người dùng sẽ đi từ một trang này sang trang khác để các lỗ hổng được giảm thiểu. Tuy nhiên, chúng có thể không khởi động lại trình duyệt, do đó, rò rỉ bộ nhớ trình duyệt có thể nghiêm trọng. Một số mã JavaScript được biết là gây ra rò rỉ bộ nhớ trên một số trình duyệt, Internet Explorer có lẽ là tồi tệ nhất trong lĩnh vực này. Đối với nó, bạn có thể tìm thấy Microsoft JavaScript Memory Leak Detector là rất hữu ích.

lần Về

IE, Chrome và Safari đã được xây dựng trong profilers trong những công cụ phát triển web mà tàu với trình duyệt. Đối với Firefox, bạn có thể sử dụng Firebug.Cũng hữu ích có thể được, vì bạn đang sử dụng jQuery có nghĩa là báo cáo lược tả của bạn sẽ được lấp đầy với các chức năng ẩn danh và giống nhau, làm cho nó khá khó đọc, John Resig's jQuery profiling plugin, mà sẽ cung cấp cho bạn một đầu ra rõ ràng hơn về vấn đề này.

+0

Cảm ơn rất nhiều, tôi sẽ thử bộ dò tìm rò rỉ bộ nhớ cho IE. PS, liên kết trong Ajaxian không còn hoạt động nữa, đây là liên kết hoạt động: http://blogs.msdn.com/gpde/pages/javascript-memory-leak-detector_v2.aspx – Eli

+1

Liên kết của John Resig với tập lệnh không còn công trinh. – drewish

+0

Giả định có thể không phải lúc nào cũng được giữ. Một số trang sẽ được mở trong một thời gian dài, ví dụ như Gmail hoặc Facebook và mã JavaScript có rò rỉ bộ nhớ trong chúng sẽ hiển thị nhanh chóng. – MauganRa

0

Firebug hoặc Tốc độ trang của Google dành cho Firefox có công cụ lược tả.

10

Sử dụng Firebug. Để báo giá từ http://getfirebug.com/js.html:

Để sử dụng hồ sơ, chỉ cần chuyển đến tab Bảng điều khiển và nhấp vào nút "Hồ sơ". Sau đó, sử dụng ứng dụng của bạn một chút hoặc tải lại trang và sau đó nhấp lại vào nút "Hồ sơ". Sau đó, bạn sẽ thấy một báo cáo chi tiết cho thấy những chức năng nào được gọi và lượng thời gian mà mỗi chức năng đã thực hiện.

4

Tôi khuyên bạn nên xem profiler trong Firebug và plugin Drip dành cho IE để giúp tìm kiếm rò rỉ bộ nhớ.

Ngoài ra, chỉ cần nhớ rằng hầu hết rò rỉ bộ nhớ javascript đến từ tham chiếu vòng tròn giữa đối tượng DOM và đối tượng javascript không bị hỏng khi đối tượng DOM được tải. Để ngăn chặn điều đó, tôi sẽ đề nghị tránh tạo tham chiếu đến đối tượng javascript trong thuộc tính đối tượng DOM (ví dụ: tránh một số thứ như document.getElementById('foo').bar = myObject;). Nếu bạn phải tạo các tham chiếu vòng tròn này, hãy chắc chắn tự mình phá vỡ chúng trong một hàm chạy khi tải trang, hoặc khi loại bỏ các đối tượng DOM trước khi dỡ bỏ.

1

Một cách đơn giản khác để kiểm tra một đoạn mã cụ thể là thêm bộ hẹn giờ xung quanh nó.

var testStart = new Date(); 

// code to be tested here 

$('#jstest').html("selected function: "+ (new Date() - testStart) + " milliseconds"); 

Trường hợp jstest là phần tử nhịp ở đâu đó hiển thị trên trang của bạn.

2

Google Chrome cũng có tùy chọn cá nhân

1

tùy chọn Mặc dù chrome đã profiling inbuilt nó không cung cấp thông tin chính xác về object.So tôi thích sử dụng công cụ tìm kiếm-cho-javascript bị rò rỉ đã giúp tôi trong mã của tôi.

https://code.google.com/p/leak-finder-for-javascript/

Tôi hy vọng điều này sẽ giúp.

+0

Bạn đang trễ một chút để trả lời câu hỏi này, nhưng cảm ơn bạn đã liên kết thú vị –

Các vấn đề liên quan