Trong khi tìm kiếm các vấn đề hiệu suất trong thư viện JavaScript (đinh tán), tôi thấy rằng việc thu thập rác xảy ra 3-4 lần trong một lần chạy, chiếm ~ 15% thời gian thực hiện (sử dụng Hồ sơ JS DevTools của Chrome).Cách phát hiện phân bổ bộ nhớ đang kích hoạt thu thập rác trong JavaScript?
Có ít nhất 30 địa điểm mà các chức năng/đối tượng tạm thời được tạo ra làm ứng cử viên tiềm năng vì lý do thu gom rác thải.
Tôi muốn biết nếu có cách nào để tìm ra chức năng nào chịu trách nhiệm phân bổ bộ nhớ bị thu gom rác, vì vậy tôi có thể tập trung điều chỉnh hiệu suất của mình.
tôi ghi lại Heap Phân bổ thời gian nhưng nó không phân biệt bộ nhớ đã được thu gom rác thải và vẫn nắm giữ một tài liệu tham khảo (không có thanh màu xám như chỉ trong DevTools doc)
Cũng ghi Heap Phân bổ hồ sơ mà không may mắn.
Rất cám ơn. Theo hướng dẫn của bạn, tôi đã quản lý để xác định các chức năng cụ thể. Nhưng các giá trị hiển thị trong vùng nông và được giữ lại có vẻ là kích thước của chính hàm đó chứ không phải bộ nhớ được cấp phát khi chạy. Ví dụ: hàm buildBinding (một phương thức của một lớp) có kích thước cạn 144 và kích thước giữ lại 144, giống như các hàm khác. Nhưng chức năng này phân bổ một số đối tượng tạm thời như trong 'var context = pipes.shift(). Split (" <"). Map (trimStr); ' Tôi vẫn không thể tìm thấy, ví dụ, bao nhiêu tôi sẽ tiết kiệm trong bộ nhớ nếu tôi thay đổi việc thực hiện để tránh những đối tượng tạm thời. – blikblum
@blikblum Là 'var context = pipes.shift(). Split (" <"). Map (trimStr);' được liệt kê trên một dòng riêng lẻ tại bảng đầu ra? – guest271314
No. Đó là một phần của bodybuildBinding. Đây là mã thực tế: https://github.com/blikblum/rivets/blob/svelte/dist/rivets.js#L337 – blikblum