2012-07-03 3 views
5

javascript của tôi khá đơn giản. Nó chỉ tiếp tục gọi ajax để tải dữ liệu và hiển thị nó trên màn hình của tôi. Tôi sử dụng lại những phần tử DOM đó bằng cách cập nhật dữ liệu trực tiếp (sử dụng hàm $ (DIV) .empty() của jquery và sau đó nối thêm vào một nội dung khác). Tuy nhiên, sau khi chạy qua đêm, máy tính của tôi bị treo và có vẻ như cứ tiếp tục làm điều gì đó.Hệ thống treo sau khi chạy javascript qua đêm

Tôi cố gắng xem mức tiêu thụ bộ nhớ của một số addon firefox. Khi chạy hai giờ, bộ nhớ có thể tăng 200MB, nhưng tôi không chắc liệu bộ nhớ đó chỉ do js của tôi hay lý do khác gây ra hay không.

Tôi có một số câu hỏi về vấn đề này. 1. là có cách nào tốt để giám sát nó (chẳng hạn như bao nhiêu bộ nhớ được sử dụng bởi trang web cụ thể, bao nhiêu tài nguyên CPU bị chiếm đóng, và làm thế nào?) 2. là có một số kinda chung cách để thiết kế ứng dụng web js để tránh vấn đề như vậy?

cảm ơn, mọi nhận xét đều được đánh giá cao!

+0

Bạn đang sử dụng trình duyệt nào? (EDIT: Ồ, tôi thấy FF). Bạn đã lặp lại thử nghiệm với các trình duyệt khác nhau chưa? –

+0

bạn đã sử dụng trình tạo firebug chưa? với nó, bạn có thể thấy nơi mà các cuộc gọi của bạn đang đi. – megakorre

+0

Bạn đã nghĩ đến việc tiếp cận vấn đề từ một góc độ khác. Thay vì sử dụng ajax, chỉ cần sử dụng thẻ meta-refresh để tải lại trang? – NotMe

Trả lời

3

Một số phiên bản Firefox nhất định sử dụng tính tham chiếu làm chiến lược thu gom rác. Việc đếm tham chiếu dễ bị rò rỉ bộ nhớ trong một số trường hợp nhất định.

Internet Explorer và Mozilla Firefox là hai trình duyệt web nhất thường được liên kết với rò rỉ bộ nhớ trong JavaScript. Thủ phạm trong cả hai trình duyệt là mô hình đối tượng thành phần được sử dụng để quản lý các đối tượng DOM . Cả Windows COM gốc và XPCOM của Mozilla đều sử dụng bộ sưu tập rác thải tham chiếu để phân bổ bộ nhớ và truy xuất. Tính năng tham chiếu không phải lúc nào cũng tương thích với bộ sưu tập rác đánh dấu và quét được sử dụng cho JavaScript. Bài viết này tập trung vào các cách khắc phục sự cố rò rỉ bộ nhớ trong mã JavaScript. Xem Tài nguyên để tìm hiểu thêm về xử lý bộ nhớ lớp COM trong Firefox và IE.

Từ http://www.ibm.com/developerworks/web/library/wa-memleak/

0

Bạn có thể sử dụng tính năng Dòng thời gian của Chrome để theo dõi việc sử dụng bộ nhớ theo thời gian. Nó là một phần của các công cụ phát triển được xây dựng. Tôi chắc chắn Firebug hoặc một plugin FF sẽ cung cấp chức năng tương tự.

2

Tôi đã linh cảm một mức tiêu thụ bộ nhớ là bởi vì trong jQuery, mỗi khi một cuộc gọi ajax được thực hiện, một jqXHR được tạo ra để quản lý các yêu cầu và xử lý tiếp theo (callbacks, kiểm tra tình trạng, v.v.) Tôi không thấy bất cứ điều gì trong tài liệu jQuery, nơi chúng tự động bị xóa. Vì vậy, javascript của bạn chỉ là chồng chất chúng lên.

http://api.jquery.com/jQuery.ajax/