चूंकि जाहिरा तौर पर आप नक्शे के उदाहरणों को नष्ट नहीं कर सकते हैं, इस समस्या को कम करने का एक तरीका यदि
- आपको एक वेबसाइट पर एक साथ कई मानचित्र दिखाने की आवश्यकता है
- उपयोगकर्ता इंटरैक्शन के साथ नक्शे की संख्या बदल सकती है
- मानचित्रों को अन्य घटकों के साथ छिपाया और फिर से दिखाया जाना चाहिए (अर्थात वे 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.ap के निर्माता के दूसरे तर्क के अनुसार) पास करते हैं, और यह दोनों नक्शा उदाहरण देता है (जिस पर आप google.maps.Map से संबंधित कार्य कह सकते हैं), और कंटेनर, जो आप "myDivClassHereForStyling" क्लास का उपयोग करके स्टाइल कर सकते हैं, और आप DOM करने के लिए व्यावहारिक रूप से अपील कर सकते हैं। यदि आपको सिस्टम रीसेट करने की आवश्यकता है, तो आप mapInstancesPool.reset () का उपयोग कर सकते हैं। यह पुन: उपयोग के लिए पूल में सभी मौजूदा उदाहरणों को रखते हुए काउंटर को 0 पर रीसेट कर देगा। मेरे आवेदन में मुझे एक ही बार में सभी मानचित्रों को हटाने और मानचित्रों का एक नया सेट बनाने की आवश्यकता थी, इसलिए किसी विशिष्ट मानचित्र उदाहरण को रीसायकल करने का कोई कार्य नहीं है: आपका माइलेज भिन्न हो सकता है। नक्शे को स्क्रीन से हटाने के लिए, मैं jQuery की टुकड़ी का उपयोग करता हूं, जो मानचित्र के कंटेनर को नष्ट नहीं करता है।
इस प्रणाली का उपयोग करके, और उपयोग करके
google.maps.event.clearInstanceListeners(window);
google.maps.event.clearInstanceListeners(document);
और चल रहा है
google.maps.event.clearInstanceListeners(divReference[0]);
divReference.detach()
(जहाँ divReference है डिव का jQuery ऑब्जेक्ट इंस्टेंस पूल से लौटाया जाता है) हर उस डिव पर, जिसे मैं हटा रहा हूँ, मैं क्रोम की मेमोरी के उपयोग को कम या ज्यादा स्थिर रखने में कामयाब रहा, क्योंकि हर बार जब मैं नक्शे हटाता हूं और नए जोड़ता हूं तो इसका विरोध होता है।