Tôi có một ứng dụng Javascript khá phức tạp, có vòng lặp chính được gọi là 60 lần mỗi giây. Dường như có rất nhiều bộ sưu tập rác đang diễn ra (dựa trên đầu ra 'răng cưa' từ dòng thời gian Bộ nhớ trong các công cụ dành cho Chrome) - và điều này thường ảnh hưởng đến hiệu suất của ứng dụng.Thực tiễn tốt nhất để giảm hoạt động Thu gom rác trong Javascript
Vì vậy, tôi đang cố gắng nghiên cứu các phương pháp hay nhất để giảm số lượng công việc mà người thu gom rác phải làm. (Hầu hết các thông tin tôi có thể tìm thấy trên web liên quan đến việc tránh rò rỉ bộ nhớ, đó là một câu hỏi hơi khác - bộ nhớ của tôi được giải phóng, nó chỉ là có quá nhiều bộ sưu tập rác đang xảy ra.) Tôi giả sử rằng điều này chủ yếu đi xuống để tái sử dụng các đối tượng càng nhiều càng tốt, nhưng tất nhiên ma quỷ là trong các chi tiết.
Ứng dụng được cấu trúc trong 'các lớp' dọc theo các dòng John Resig's Simple JavaScript Inheritance. Tôi nghĩ một vấn đề là một số chức năng có thể được gọi là hàng ngàn lần mỗi giây (vì chúng được sử dụng hàng trăm lần trong mỗi lần lặp của vòng lặp chính), và có lẽ các biến làm việc cục bộ trong các hàm này (chuỗi, mảng). , vv) có thể là vấn đề.
Tôi biết về đối tượng gộp cho các đối tượng lớn hơn hoặc nặng hơn (và chúng tôi sử dụng nó ở mức độ), nhưng tôi đang tìm kiếm các kỹ thuật có thể áp dụng trên bảng, đặc biệt liên quan đến các hàm được gọi rất nhiều lần trong các vòng chặt chẽ.
Tôi có thể sử dụng những kỹ thuật nào để giảm lượng công việc mà bộ thu gom rác phải làm?
Và, cũng có thể - những kỹ thuật nào có thể được sử dụng để xác định đối tượng nào đang được thu gom rác nhiều nhất? (Đó là một codebase cực lớn, vì vậy việc so sánh các ảnh chụp nhanh của heap không thành công)
Bạn có ví dụ về mã của mình mà bạn có thể hiển thị cho chúng tôi không? Câu hỏi sẽ dễ trả lời hơn (nhưng cũng ít có khả năng chung hơn, vì vậy tôi không chắc chắn ở đây) –
Bạn có thể sử dụng và sử dụng lại các biến trong phạm vi bên ngoài, để bạn không tạo lại chúng mỗi lần. Ví dụ: 'var x =" longstring ";' trong vòng lặp của bạn sẽ gây ra hàng nghìn "longsting" được tạo ra, nhưng trong một outerscope nó sẽ chỉ gây ra một "chuỗi dài". – Paulpro
Làm thế nào về chức năng dừng chạy hàng ngàn lần mỗi giây? Đó có thực sự là cách duy nhất để tiếp cận điều này? Câu hỏi này có vẻ giống như một vấn đề XY. Bạn đang mô tả X nhưng những gì bạn đang thực sự tìm kiếm là một giải pháp cho Y. –