Görünüşe göre harita örneklerini gerçekten yok edemeyeceğiniz için, bu sorunu azaltmanın bir yolu,
- bir web sitesinde aynı anda birkaç harita göstermeniz gerekiyor
- harita sayısı kullanıcı etkileşimiyle değişebilir
- haritaların diğer bileşenlerle birlikte gizlenmesi ve yeniden gösterilmesi gerekir (yani, DOM'da sabit bir konumda görünmezler)
bir harita örnekleri havuzu tutuyor. Havuz, kullanılan örneklerin izlerini tutar ve yeni bir örnek istendiğinde, mevcut harita örneklerinden herhangi birinin ücretsiz olup olmadığını kontrol eder: eğer öyleyse, mevcut olanı döndürür, değilse, bir yeni harita örneği ve onu havuza ekleyerek döndürür. Bu şekilde, ekranda eşzamanlı olarak gösterdiğiniz maksimum harita sayısına eşit bir maksimum örneğe sahip olacaksınız. Bu kodu kullanıyorum (jQuery gerektirir):
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
}
}
}
Başlangıç haritası seçeneklerini (google.maps.Map yapıcısının ikinci bağımsız değişkenine göre) iletirsiniz ve hem harita örneğini (google.maps.Map ile ilgili işlevleri çağırabileceğiniz) hem de kapsayıcıyı döndürür. "myDivClassHereForStyling" sınıfını kullanarak stil oluşturabilir ve dinamik olarak DOM'a ekleyebilirsiniz. Sistemi sıfırlamanız gerekirse, mapInstancesPool.reset () öğesini kullanabilirsiniz. Havuzdaki mevcut tüm örnekleri yeniden kullanım için tutarken sayacı 0'a sıfırlayacaktır. Uygulamamda tüm haritaları bir kerede kaldırmam ve yeni bir harita seti oluşturmam gerekiyordu, bu nedenle belirli bir harita örneğini geri dönüştürmek için bir işlev yok: kilometreniz değişebilir. Haritaları ekrandan kaldırmak için, haritanın kapsayıcısını yok etmeyen jQuery's detach'i kullanıyorum.
Bu sistemi kullanarak ve kullanarak
google.maps.event.clearInstanceListeners(window);
google.maps.event.clearInstanceListeners(document);
ve koşuyor
google.maps.event.clearInstanceListeners(divReference[0]);
divReference.detach()
(divReference, div'in Örnek Havuzundan döndürülen jQuery nesnesidir) kaldırdığım her div'de, haritaları silip yenilerini her eklediğimde artması yerine Chrome'un bellek kullanımını az ya da çok sabit tutmayı başardım.