Karena tampaknya Anda tidak dapat benar-benar menghancurkan contoh peta, cara untuk mengurangi masalah ini jika
- Anda perlu menampilkan beberapa peta sekaligus di situs web
- jumlah peta dapat berubah dengan interaksi pengguna
- peta perlu disembunyikan dan ditampilkan kembali bersama dengan komponen lain (yaitu mereka tidak muncul dalam posisi tetap di DOM)
menyimpan sekumpulan contoh peta. Pool terus melacak instance yang digunakan, dan ketika diminta instance baru, ia memeriksa apakah ada instance peta yang tersedia gratis: jika ada, itu akan mengembalikan yang sudah ada, jika tidak, itu akan membuat contoh peta baru dan mengembalikannya, menambahkannya ke kolam. Dengan cara ini Anda hanya akan memiliki jumlah maksimum contoh yang sama dengan jumlah maksimum peta yang pernah Anda tampilkan secara bersamaan di layar. Saya menggunakan kode ini (membutuhkan jQuery):
var mapInstancesPool = {
pool: [],
used: 0,
getInstance: function(options){
if(mapInstancesPool.used >= mapInstancesPool.pool.length){
mapInstancesPool.used++;
mapInstancesPool.pool.push (mapInstancesPool.createNewInstance(options));
} else {
mapInstancesPool.used++;
}
return mapInstancesPool.pool[mapInstancesPool.used-1];
},
reset: function(){
mapInstancesPool.used = 0;
},
createNewInstance: function(options){
var div = $("<div></div>").addClass("myDivClassHereForStyling");
var map = new google.maps.Map(div[0], options);
return {
map: map,
div: div
}
}
}
Anda meneruskan opsi peta awal (sesuai argumen kedua dari konstruktor google.maps.Map), dan mengembalikan instance peta (tempat Anda dapat memanggil fungsi yang berkaitan dengan google.maps.Map), dan container, yang mana Anda dapat mengatur gaya menggunakan kelas "myDivClassHereForStyling", dan Anda dapat menambahkan DOM secara dinamis. Jika Anda perlu mengatur ulang sistem, Anda dapat menggunakan mapInstancesPool.reset (). Ini akan mengatur ulang penghitung ke 0, sambil menyimpan semua contoh yang ada di kumpulan untuk digunakan kembali. Dalam aplikasi saya, saya perlu menghapus semua peta sekaligus dan membuat satu set peta baru, jadi tidak ada fungsi untuk mendaur ulang contoh peta tertentu: jarak tempuh Anda mungkin berbeda. Untuk menghapus peta dari layar, saya menggunakan detach jQuery, yang tidak merusak container peta.
Dengan menggunakan sistem ini, dan menggunakan
google.maps.event.clearInstanceListeners(window);
google.maps.event.clearInstanceListeners(document);
dan berlari
google.maps.event.clearInstanceListeners(divReference[0]);
divReference.detach()
(di mana divReference adalah objek jQuery div yang dikembalikan dari Instance Pool) pada setiap div yang saya hapus, saya berhasil menjaga penggunaan memori Chrome lebih atau kurang stabil, berlawanan dengan peningkatan setiap kali saya menghapus peta dan menambahkan yang baru.