2010-04-19 7 views
11

मैं वर्तमान में qooxdoo जावास्क्रिप्ट ढांचे के हैंडलिंग का निपटान करने वाले ऑब्जेक्ट पर पुनर्विचार कर रहा हूं।
निम्नलिखित चित्र पर एक नज़र (ए दायरे में है) है:कचरा संग्रहण एल्गोरिदम क्या सभी 5 प्रमुख ब्राउज़रों का उपयोग करते हैं?

diagram http://yuml.me/51747906.jpg

मान लीजिए कि हम आम तौर पर बी को नष्ट करना चाहते हैं, हम सभी वस्तुओं के बीच सभी संदर्भ काटा। इसका मतलब है कि हम उदाहरण में 1 से 5 कनेक्शन काटते हैं। क्या यह वास्तव में जरूरी है?
जहां तक ​​मैंने here पढ़ा है, ब्राउज़र मार्क-एंड-स्वीप एल्गोरिदम का उपयोग करते हैं। उस स्थिति में, हमें केवल संदर्भ 1 (दायरे से कनेक्शन) और 5 (डीओएम से कनेक्शन) में कटौती करने की आवश्यकता है जो बहुत तेज़ हो सकता है।
लेकिन क्या मुझे यकीन है कि सभी ब्राउज़र मार्क-एंड-स्वीप एल्गोरिदम या कुछ समान उपयोग करते हैं?

+0

शायद आपको हमें बताएं कि आपके दृश्य में 5 प्रमुख ब्राउज़र _are_ क्या हैं। उदाहरण के लिए वे आईई 6, आई 7, आईई 8, एफएफ 3 और सफारी हैं ?! –

+1

5 प्रमुख ब्राउज़र के साथ मेरा मतलब है एफएफ (2, 3, 3.5, 3.6), ओपेरा (9, 10, 10.5), सफारी (3, 4), क्रोम (2, 3, 4, 5) और आईई (6, 7 , 8)। –

उत्तर

2

किसी भी सभ्य कचरा कलेक्टर (न केवल मार्क-एंड-स्वीप) के लिए, कनेक्शन 1 काटने बी (और सी और डी और खिड़की) को छोड़ने के लिए पर्याप्त होगा। संदर्भ गिनती के आधार पर आवंटन उनके चक्रीय संदर्भों (बी संदर्भ डी और डी संदर्भ बी) के कारण बी और डी जारी करने में विफल रहेगा, लेकिन संदर्भ गणना वास्तव में कचरा संग्रह नहीं है।

मुझे लगता है कि यह सुनिश्चित करना सुरक्षित है कि सभी ब्राउज़र एक सभ्य कचरा कलेक्टर (अच्छी तरह से, ब्राउज़र के साथ, कुछ भी वास्तव में सुरक्षित नहीं है, लेकिन एक जावास्क्रिप्ट कार्यान्वयन उचित कचरा कलेक्टर का उपयोग नहीं कर रहा है, फिर भी असंभव है)।

+1

संदर्भ गणना कचरा संग्रह को लागू करने के लिए पर्याप्त नहीं है, लेकिन यह अभी भी एक सभ्य जीसी का हिस्सा हो सकता है। जब गिनती 0 हिट होती है, तो आप सकारात्मक रूप से जानते हैं कि आप ऑब्जेक्ट एकत्र कर सकते हैं। यह शॉर्टकट आपको जीसी कई ऑब्जेक्ट्स को महंगी मार्क-एंड-स्वीप चरण के बिना अनुमति दे सकता है। इसके अलावा, जब समय एक मार्क-एंड-स्वीप करने के लिए आता है, तो साफ करने के लिए कम कचरा छोड़ दिया जाता है। – MSalters

+0

गणना की गणना के कारण संदर्भ गणना महंगा है (विशेष रूप से कैश के संबंध में)। Asymptotically, चक्र के बिना भी, निशान गणना और संदर्भ संदर्भ गणना से कम महंगा है। संदर्भ गणना, हालांकि, कुछ परिस्थितियों में वर्चुअल मेमोरी के साथ बेहतर बातचीत करती है, यही कारण है कि पर्ल इसका उपयोग करता है (पर्ल पॉइंटर्स के बजाए नामों से गतिशील बाइंडिंग में विश्वास करता है, और इस प्रकार बहुत कम "सच्चे चक्र" बनाता है, हालांकि, पर्ल _also_ के पास एक निशान- और -पी जीसी)। –

2

बात यह है कि एक आदर्श दुनिया में, आपको मूल रूप से केवल डोम नोड्स और देशी ईवेंट श्रोताओं को डिस्कनेक्ट करने की आवश्यकता होती है। समस्या यह है कि, qooxdoo में मूल प्रणाली आईई 6 जैसे बग्गी ब्राउज़र के आसपास डिज़ाइन की गई थी। जब हमने जितना संभव हो उतना हटा दिया तो हमने बड़े पैमाने पर स्मृति उपयोग को देखा। आज की दुनिया में मैं इसे इस तरह से फिर से डिजाइन कर दूंगा कि यह आईई 6 में ठीक है, लेकिन इसकी समस्याओं के लिए अनुकूलित नहीं है।

पूरे आवेदन (पूरी तरह से निपटान) के पूर्ण शटडाउन और केवल एक आवेदन के एक अंश को निपटाने का एक अंतर भी है। आखिरी परिदृश्य में आपको अभी भी आवश्यक सामानों का निपटान न करने के लिए काफी सावधानीपूर्वक कार्य करने की आवश्यकता है।

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