2012-12-09 6 views
5

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

उत्तर

6

MDN के अनुसार:

2012 के रूप में, सभी आधुनिक ब्राउज़रों एक निशान और झाडू कचरा-कलेक्टर जहाज। पिछले कुछ वर्षों में जावास्क्रिप्ट कचरा संग्रह (पीढ़ी/वृद्धिशील/समवर्ती/समांतर कचरा संग्रह) के क्षेत्र में किए गए सभी सुधार इस एल्गोरिदम के कार्यान्वयन में सुधार हैं, लेकिन कचरा संग्रह एल्गोरिदम पर सुधार नहीं करते हैं और न ही इसकी परिभाषा में कमी "एक वस्तु की अब कोई आवश्यकता नहीं है"

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

तो यदि आप मॉडेन ब्राउज़र के लिए विकास कर रहे हैं तो आप सभी अच्छे हैं, लेकिन यदि आप आईई 6/7 जैसे ब्राउज़रों की संगतता चाहते हैं तो आपको थोड़ी अधिक शामिल समाधान की आवश्यकता होगी (यह हमेशा तरीका है, है ना। ..)

+0

धन्यवाद! साथ ही महान लिंक भी। – DudeOnRock

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

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