Da Sie anscheinend Karteninstanzen nicht wirklich zerstören können, können Sie dieses Problem reduzieren, wenn
- Sie müssen mehrere Karten gleichzeitig auf einer Website anzeigen
- Die Anzahl der Karten kann sich mit der Benutzerinteraktion ändern
- Die Karten müssen ausgeblendet und zusammen mit anderen Komponenten erneut angezeigt werden (dh sie werden nicht an einer festen Position im DOM angezeigt).
hält einen Pool von Karteninstanzen. Der Pool verfolgt die verwendeten Instanzen und prüft, wenn eine neue Instanz angefordert wird, ob eine der verfügbaren Karteninstanzen frei ist. Wenn dies der Fall ist, wird eine vorhandene Instanz zurückgegeben. Wenn dies nicht der Fall ist, wird eine erstellt neue Karteninstanz und geben Sie sie zurück und fügen Sie sie dem Pool hinzu. Auf diese Weise haben Sie nur eine maximale Anzahl von Instanzen, die der maximalen Anzahl von Karten entspricht, die Sie jemals gleichzeitig auf dem Bildschirm anzeigen. Ich verwende diesen Code (es erfordert 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
}
}
}
Sie übergeben ihm die Startkartenoptionen (gemäß dem zweiten Argument des Konstruktors von google.maps.Map) und es wird sowohl die Karteninstanz (auf der Sie Funktionen für google.maps.Map aufrufen können) als auch der Container zurückgegeben Sie können mit der Klasse "myDivClassHereForStyling" stylen und an das DOM anhängen. Wenn Sie das System zurücksetzen müssen, können Sie mapInstancesPool.reset () verwenden. Der Zähler wird auf 0 zurückgesetzt, während alle vorhandenen Instanzen im Pool zur Wiederverwendung aufbewahrt werden. In meiner Anwendung musste ich alle Karten auf einmal entfernen und einen neuen Kartensatz erstellen, damit es keine Funktion zum Recyceln einer bestimmten Karteninstanz gibt: Ihr Kilometerstand kann variieren. Um die Karten vom Bildschirm zu entfernen, verwende ich jQuerys Detach, wodurch der Container der Karte nicht zerstört wird.
Mit diesem System und mit
google.maps.event.clearInstanceListeners(window);
google.maps.event.clearInstanceListeners(document);
und läuft
google.maps.event.clearInstanceListeners(divReference[0]);
divReference.detach()
(wobei divReference das jQuery-Objekt des div ist, das aus dem Instanzpool zurückgegeben wird) Bei jedem Div, das ich entferne, konnte ich die Speichernutzung von Chrome mehr oder weniger stabil halten, anstatt sie jedes Mal zu erhöhen, wenn ich Karten lösche und neue hinzufüge.