2010-06-07 35 views
6

मैं एक कुछ जावास्क्रिप्ट है कि मैं IE में IE और क्रोम पर परीक्षण कर रहा हूँ और देखा स्मृति रिसाव लक्षण (गूगल मैप्स एपीआई के साथ प्रयुक्त) केवल होती है: जब मैं पेज लगातार ताज़ा करते हैं, IE में इस्तेमाल किया स्मृति की मात्रा रहती है बढ़ रहा है (तेज़), लेकिन क्रोम में यह स्थिर रहता है। (के रूप में यह नहीं बल्कि लंबा है), मैं क्या के लिए बाहर देखने के लिए के रूप में कुछ सुझाव प्राप्त कर सकते हैं कोड के सभी पोस्टिंग के बिना? पेज रीफ्रेश पर आईई में इस तरह की मेमोरी बढ़ने का कारण क्या हो सकता है?जावास्क्रिप्ट स्मृति रिसाव

जैसा मैंने कहा कि मैं कोड के बिना अपनी हार्ड पता है, लेकिन मैं अगर किसी भी सामान्य सलाह पहले से काम करता है देखना चाहते हैं। धन्यवाद।

अद्यतन: प्रतिक्रियाओं के लिए धन्यवाद। एक मानसिक स्वास्थ्य की जांच के रूप में, मैं यह देखने के लिए कि क्या IE में क्या होगा (कोड नीचे दिखाया गया है) गूगल मैप्स एपीआई "नमस्ते दुनिया" कोड from google भाग गया। IE में यह कोड चलाते समय, जब मैं पृष्ठ को बार-बार रीफ्रेश करता रहता हूं, तो स्मृति बढ़ती जा रही है और बढ़ती जा रही है। क्या यह एक स्मृति रिसाव है? यह does not इरादा कार्यक्षमता की तरह लग ...

<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
    function initialize() { 
    var latlng = new google.maps.LatLng(-34.397, 150.644); 
    var myOptions = { 
     zoom: 8, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
    } 

</script> 
</head> 
<body onload="initialize()"> 
    <div id="map_canvas" style="width:100%; height:100%"></div> 
</body> 
</html> 

अद्यतन 2: तो वहाँ IE में स्मृति लीक बिना चलाने के लिए इस गूगल नमस्ते विश्व मानचित्र एपीआई कोड प्राप्त करने के लिए कोई तरीका है? मैंने देखा कि अगर मैं maps.google.com पर एक ही प्रयोग चलाता हूं तो यह रिसाव नहीं लगता है ... अगर कोई मुझे हैलो वर्ल्ड कोड को संशोधित करने में मदद कर सकता है तो यह बहुत अच्छा होगा ताकि यह आईई में रिसाव न हो; इस तरह से मैं इसके बारे में बंद का निर्माण कर सकते (मैं JQuery का उपयोग कर अगर यह मदद मिलेगी कोई आपत्ति नहीं है, लेकिन मैं नमस्ते विश्व कोड पर यह कोशिश की और यह अभी भी IE में लीक गया था)। धन्यवाद फिर से

+1

IE 6, जहां एक बहुत ही विशेष रिसाव मुद्दा था कि क्या आप सभी ईवेंट हैंडलर्स (onclick, onmousever, ऑनलोड) पर बाहर शून्य में नहीं आया एचटीएमएल तत्व आप creati थे एनजी और गतिशील रूप से नष्ट, उन संदर्भों को कभी कचरा इकट्ठा नहीं होगा। यह बाद के संस्करणों में तय किया गया था। तो यदि आप आईई 6 में इसका अनुभव कर रहे हैं, तो यह आपकी समस्या है (हालांकि Google का कोड इस मुद्दे से ऊपर होना चाहिए)। याद रखें कि जब ब्राउज़र ऐसा लगता है तो ब्राउज़र कचरा कलेक्टर चलाएगा, और जब भी आप इसकी अपेक्षा नहीं करेंगे। यदि आप प्रतीक्षा करते हैं तो स्मृति उपयोग ड्रॉप हो जाता है? – Andrew

+0

मैं वास्तव में आईई 7 का उपयोग कर रहा हूं, और प्रतीक्षा करते समय स्मृति ड्रॉप नहीं होती है ... जब मैं इसे पर जोड़ रहा हूं तो मैं "सभी ईवेंट हैंडलर को कैसे हटा दूंगा"? – hhj

+1

यदि आप आईई 7 का उपयोग कर रहे हैं, तो इस समस्या से आपको प्रभावित नहीं होना चाहिए। इससे पहले समस्या यह थी कि यदि आपके पास कोई तत्व था जिसमें घटनाएं थीं (यदि नक्शा ड्रैग-एंड-ड्रॉप कार्यक्षमता है, तो यह करता है) - आपको ईवेंट के हैंडलर वाले सभी तत्वों के माध्यम से लूप करना होगा और ' document.getElementById ('mydiv')। onclick = null; 'आदि लेकिन आप पूरी तरह से सही हैं। उपरोक्त आपके कोड के मामले में, आप कुछ भी गलत नहीं कर रहे हैं जो मैं देख सकता हूं। यह Google कोड के साथ एक मुद्दा होना चाहिए - सबसे खराब उत्तर मैं संभवतः दे सकता हूं। – Andrew

उत्तर

7

अद्यतन:

मैं drip.exe साथ उपरोक्त कोड का परीक्षण किया और ऐसा लगता है वास्तव में एक स्मृति रिसाव की तरह कुछ नहीं है। कुछ मिनटों के लिए ऑटो रीफ्रेशिंग के साथ कोड चलाते समय स्मृति उपयोग तेजी से बढ़ गया।

अद्यतन 2:

मुझे लगता है कि इस बग है: http://code.google.com/p/gmaps-api-issues/issues/detail?id=1555&can=1&q=unload&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Internal%20Stars

+0

आपको यह विश्वास करने के लिए प्रेरित करता है कि लिंक किए गए gmaps api समस्या समस्या है? ऐसा लगता है कि आईई मेमोरी लीक के साथ बहुत कुछ नहीं है। हम आईई 7 में एक ही समस्या का सामना कर रहे हैं, यह उस ब्राउज़र के लिए एक शोस्टॉपर प्रतीत होता है ... – matao

+0

@matao ड्रिप के साथ परीक्षण बहुत \t अर्थपूर्ण – powtac

+0

@matao है, जैसा कि मैंने अपने अद्यतन खंड में कहा था, ड्रिप दिखाता है कि mem ताज़ा होने पर उपभोग बढ़ गया और चूंकि जी मानचित्रों की तुलना में कोई अन्य कोड नहीं है, इसलिए रिसाव कहीं और होना चाहिए। मुझे यकीन है कि इस समस्या को जी द्वारा हल किया गया था, या डॉक्स के अनुसार एंड्रयू के सुझाव का उपयोग किया जाना चाहिए: 'onunload = "GUnload()" ' – powtac

1

आईई मेमोरी लीक से एक अच्छी तरह से ज्ञात स्रोत बंद में जावास्क्रिप्ट "सामान" की (जानबूझकर या आकस्मिक) फँसाने है (फ़ंक्शन) ईवेंट हैंडलर के रूप में डीओएम तत्वों के रूप में बंधे हैं। ज्यादातर ढांचे घटना कारणों को स्पष्ट रूप से उस कारण से साफ़ करने के लिए कड़ी मेहनत करते हैं।

1

आपको पृष्ठ छोड़ने से पहले GUnload निष्पादित करने की आवश्यकता है।बस एक "उतारना" घटना जोड़ें:

<body onload="initialize()" onunload="GUnload()"> 

पर इस रिसाव के बारे में और अधिक पढ़ें Google Maps API

+2

मैं एपीआई v3 का उपयोग कर रहा हूं। फिर भी सुझाव के लिए धन्यवाद। – hhj

0

जवाब में से अधिकांश अब तक वहां पहुंचने के तो मैं आईबीएम देव पर एक लेख का लिंक जोड़ रहा हूँ में मदद मिलेगी जावास्क्रिप्ट में मेमोरी रिसाव पैटर्न के लिए काम करता है (आप इसे उपयोगी हो सकती है)

http://www.ibm.com/developerworks/web/library/wa-memleak/

संबंधित मुद्दे