เนื่องจากเห็นได้ชัดว่าคุณไม่สามารถทำลายอินสแตนซ์แผนที่ได้จริงวิธีลดปัญหานี้หาก
- คุณต้องแสดงแผนที่หลายแผนที่พร้อมกันบนเว็บไซต์
- จำนวนแผนที่อาจเปลี่ยนแปลงไปตามการโต้ตอบของผู้ใช้
- แผนที่จะต้องถูกซ่อนและแสดงใหม่พร้อมกับส่วนประกอบอื่น ๆ (กล่าวคือไม่ปรากฏในตำแหน่งคงที่ใน DOM)
กำลังรักษากลุ่มของอินสแตนซ์แผนที่ พูลจะติดตามอินสแตนซ์ที่ใช้อยู่และเมื่อมีการร้องขออินสแตนซ์ใหม่จะตรวจสอบว่าอินสแตนซ์แผนที่ใด ๆ ที่มีอยู่นั้นว่างหรือไม่: หากเป็นเช่นนั้นอินสแตนซ์จะส่งคืนอินสแตนซ์ที่มีอยู่หากไม่เป็นเช่นนั้นก็จะสร้าง อินสแตนซ์แผนที่ใหม่และส่งคืนเพิ่มลงในพูล ด้วยวิธีนี้คุณจะมีจำนวนอินสแตนซ์สูงสุดเท่ากับจำนวนแผนที่สูงสุดที่คุณเคยแสดงบนหน้าจอ ฉันใช้รหัสนี้ (ต้องใช้ 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
}
}
}
คุณส่งผ่านตัวเลือกแผนที่เริ่มต้น (ตามอาร์กิวเมนต์ที่สองของตัวสร้างของ google.maps.Map) และส่งคืนทั้งอินสแตนซ์แผนที่ (ซึ่งคุณสามารถเรียกใช้ฟังก์ชันที่เกี่ยวข้องกับ google.maps.Map) และคอนเทนเนอร์ซึ่ง คุณสามารถจัดรูปแบบโดยใช้คลาส "myDivClassHereForStyling" และคุณสามารถต่อท้าย DOM แบบ dinamically หากคุณต้องการรีเซ็ตระบบคุณสามารถใช้ mapInstancesPool.reset () มันจะรีเซ็ตตัวนับเป็น 0 ในขณะที่เก็บอินสแตนซ์ที่มีอยู่ทั้งหมดไว้ในพูลเพื่อใช้ซ้ำ ในแอปพลิเคชันของฉันฉันจำเป็นต้องลบแผนที่ทั้งหมดพร้อมกันและสร้างชุดแผนที่ใหม่ดังนั้นจึงไม่มีฟังก์ชันในการรีไซเคิลอินสแตนซ์แผนที่ที่เฉพาะเจาะจง: ระยะทางของคุณอาจแตกต่างกันไป ในการลบแผนที่ออกจากหน้าจอฉันใช้การปลดของ jQuery ซึ่งไม่ทำลายคอนเทนเนอร์ของแผนที่
โดยใช้ระบบนี้และใช้
google.maps.event.clearInstanceListeners(window);
google.maps.event.clearInstanceListeners(document);
และทำงาน
google.maps.event.clearInstanceListeners(divReference[0]);
divReference.detach()
(โดยที่ divReference คือออบเจ็กต์ jQuery ของ div ที่ส่งคืนจากอินสแตนซ์พูล) ในทุกๆ div ที่ฉันกำลังลบฉันจัดการเพื่อให้การใช้งานหน่วยความจำของ Chrome มีเสถียรภาพมากขึ้นหรือน้อยลงเมื่อเทียบกับที่เพิ่มขึ้นทุกครั้งที่ฉันลบแผนที่และเพิ่มใหม่