Saya memiliki aplikasi Javascript yang cukup kompleks, yang memiliki loop utama yang dipanggil 60 kali per detik. Sepertinya ada banyak pengumpulan sampah yang terjadi (berdasarkan keluaran 'gigi gergaji' dari timeline Memori di alat pengembang Chrome) - dan ini sering memengaruhi kinerja aplikasi.
Jadi, saya mencoba meneliti praktik terbaik untuk mengurangi jumlah pekerjaan yang harus dilakukan pemulung. (Sebagian besar informasi yang dapat saya temukan di web berkenaan dengan menghindari kebocoran memori, yang merupakan pertanyaan yang sedikit berbeda - ingatan saya semakin dibebaskan, hanya saja ada terlalu banyak pengumpulan sampah yang terjadi.) Saya berasumsi bahwa ini sebagian besar bermuara pada penggunaan kembali objek sebanyak mungkin, tetapi tentu saja iblis ada dalam detailnya.
Aplikasi ini disusun dalam 'kelas' di sepanjang garis Warisan JavaScript Sederhana John Resig .
Saya pikir satu masalah adalah bahwa beberapa fungsi dapat dipanggil ribuan kali per detik (karena digunakan ratusan kali selama setiap iterasi loop utama), dan mungkin variabel kerja lokal dalam fungsi ini (string, array, dll.) mungkin masalahnya.
Saya mengetahui pengumpulan objek untuk objek yang lebih besar / lebih berat (dan kami menggunakan ini sampai tingkat tertentu), tetapi saya mencari teknik yang dapat diterapkan di seluruh papan, terutama yang berkaitan dengan fungsi yang sering dipanggil dalam loop ketat .
Teknik apa yang dapat saya gunakan untuk mengurangi jumlah pekerjaan yang harus dilakukan oleh pengumpul sampah?
Dan, mungkin juga - teknik apa yang dapat digunakan untuk mengidentifikasi objek mana yang paling banyak dikumpulkan sampah? (Ini adalah basis kode yang sangat besar, jadi membandingkan snapshot dari heap belum terlalu membuahkan hasil)