2016-01-22 7 views
8

के साथ मेमोरी लीक का निदान करना मुझे संदेह है कि मेरे एक-पेज जावास्क्रिप्ट ऐप में कहीं मेमोरी लीक है। फ़ायरफ़ॉक्स या क्रोम चलाने वाले कमजोर डिवाइस अंततः क्रैश होने लगते हैं यदि पृष्ठ खुला रहता है। मैं यह निर्धारित करने की कोशिश कर रहा हूं कि पृष्ठ को पुनः लोड करने से स्मृति को मुक्त करने की उम्मीद की जाएगी या नहीं।पेज रीलोड

मैं समझता हूं कि मेमोरी हैंडलिंग ब्राउज़र के लिए विशिष्ट है, इसलिए उत्तर क्रोम या फ़ायरफ़ॉक्स में भिन्न हो सकता है।

नोट: मुझे पता है कि ब्राउज़र में इस प्रश्न में बहुत कुछ उल्लेख किया गया है (जो विषय से बाहर होगा), लेकिन इस प्रश्न का बिंदु जावास्क्रिप्ट डिबगिंग के बारे में है, जो मुझे लगता है कि विषय पर बहुत कुछ है।

+0

आप किसी भी कोड जहां संदेह है कि यह निहित हो सकता है दिखा सकते हैं? – depperm

+0

क्या इससे मदद मिलती है? http://stackoverflow.com/questions/19621074/finding-javascript-memory-leaks-with-chrome (अन्यथा, रीफ्रेशिंग से स्मृति उपयोग को साफ़ करने की उम्मीद की जाएगी, आप आमतौर पर "सिंगल पेज ऐप" के भीतर मेमोरी लीकिंग से चिंतित होते हैं ") – mczepiel

+0

@mczepiel धन्यवाद यह सहायक है लेकिन पेज रीलोड के बारे में विशिष्ट प्रश्न को संबोधित नहीं करता है। लेकिन आपका मूलभूत क्या करता है ... क्या आप उस उत्तर में विस्तार से बता सकते हैं? – emersonthis

उत्तर

2

ब्राउज़र/एक्सटेंशन बग को छोड़कर, ब्राउज़र अब संसाधनों को मुक्त करते हैं जब उन्हें अब आवश्यकता नहीं होती है; फ़ायरफ़ॉक्स compartments साफ़ करता है, क्रोम processes और संबंधित संग्रहण को मारता है।

फ़ायरफ़ॉक्स अपना सर्वश्रेष्ठ देता है, लेकिन स्मृति स्पष्ट करने के लिए कुछ समय लग सकता है और इस अवसर पर zombie compartments बना सकते हैं:

डिब्बों नष्ट कर रहे हैं, जब वे कचरा एकत्र कर रहे हैं। यह उनके अंतिम संदर्भ गायब होने के कुछ समय बाद होता है। इसका मतलब है कि एक पृष्ठ बंद होने और उसके डिब्बे गायब होने के बीच देरी हो सकती है ...

कभी-कभी फ़ायरफ़ॉक्स में बग, ऐड-ऑन एसडीके और/या ऐड-ऑन के कारण, डिब्बे बनाए जाते हैं जो कभी नष्ट नहीं होते । ये एक विशेष प्रकार की मेमोरी रिसाव हैं, और वे फ़ायरफ़ॉक्स के मेमोरी उपयोग को समय के साथ धीरे-धीरे बढ़ने, इसे धीमा करने और इसे दुर्घटनाग्रस्त होने की अधिक संभावना बनाने का कारण बनते हैं।

Chrome टैब प्रति एक प्रक्रिया का उपयोग करता है (और वास्तव में एक टैब के भीतर कुछ संस्थाओं के रूप में अच्छी तरह से IIRC जैसे प्लगइन्स, iframes आदि के लिए subprocesses) एक ही प्रभाव है। हालांकि chrome://memory-redirect/ के खिलाफ त्वरित जांच और एक टैब को रीफ्रेश करना एक ही pid जैसा दिखता है। तो एक ताज़ा एक पूरी तरह से साफ स्लेट नहीं है।

FWIW Chrome "बलपूर्वक पुनः लोड करें" कि कैश को साफ करता है और अधिक स्मृति या प्लेसबो समाशोधन के लिए या तो उपयोगी हो सकता है है: cmd-shift-r

मैं internals के साथ वास्तव में परिचित नहीं हूँ, लेकिन मैं केवल बातें देखा है particular browser लोड प्रदर्शन को बढ़ावा देने के प्रयास में रीफ्रेश के बीच विश्वसनीय रूप से मुक्त नहीं होता है जब आप बहुत चालाक हो रहे हैं और चीजों को संरक्षित करने की कोशिश कर रहे हैं।

संक्षेप में, यदि आप उम्मीद करते हैं तो आप स्मृति मुक्त नहीं देख रहे हैं, लेकिन आप इसे सत्यापित करने के लिए विभिन्न "स्मृति: मेमोरी" टूल का उपयोग करना चाहते हैं और उस बिंदु पर यह एक ब्राउज़र बग को ट्रिप कर सकता है आप पर avoid such behavior and/or report the issue to the browser's dev team पर हो।

अन्यथा, मुझे लगता है कि उपलब्ध विभिन्न टूल का उपयोग करके पृष्ठ के भीतर अपनी मेमोरी लीक को संबोधित करके आपको सबसे अच्छी सेवा दी जाती है।

0

जेएस के संसाधन उपयोग को डीबग करने का एक अच्छा तरीका निरीक्षण उपकरण के भीतर फ़ायरफ़ॉक्स प्रदर्शन मॉनिटर का उपयोग करना है। Firefox Dev Edition has more in-depth tools

पृष्ठ पर जब F12 दबाएं और निरीक्षण विंडो में छोटे स्पीडोमीटर आइकन पर क्लिक करें; यह प्रदर्शन मॉनीटर खुल जाएगा। "रिकॉर्डिंग प्रारंभ करें" बटन दबाएं और फ़ायरफ़ॉक्स पृष्ठ पर सभी स्क्रिप्ट समय, सीएसएस गतिविधि, उपयोगकर्ता इनपुट इत्यादि को बेंचमार्क करना शुरू कर देगा।

जब आपको लगता है कि यह काफी देर तक चल रहा है, रिकॉर्डिंग रोकें और आपको सभी डेटा प्रस्तुत किया जाएगा।शीर्ष पर प्रदर्शन प्रदर्शित करने वाला एक चार्ट होगा और आप किसी भी भाग पर क्लिक कर सकते हैं और उस समय चल रहे सभी स्क्रिप्ट की जांच कर सकते हैं।

A full tutorial for the performance tools can be found here

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