2012-04-17 20 views
5

को इंस्टेंस करने का प्रदर्शन ओवरहेड आज मैंने सोचा था कि हो सकता है कि कुछ जावास्क्रिप्ट सीनियर उत्तर दे सकें।एकाधिक म्यूटूल क्लासेस

मुट्टूल में कई कक्षाएं बनाने में अनुमानित डोम ओवरहेड क्या है?

अच्छा ओओ डिज़ाइन यह निर्देश देता है कि कोड के किसी भी पुन: प्रयोज्य बिट को कक्षा में जाना चाहिए। लेकिन चूंकि मुट्टूल में हर निर्मित वर्ग स्पष्ट रूप से "कक्षा" से विरासत में मिलता है, इसलिए निश्चित रूप से बहुत अधिक तत्काल प्राप्त होता है।

तो मेरा - कम या कम दार्शनिक - प्रश्न यह है कि ब्राउज़र में उस प्रभाव का प्रदर्शन कितना होता है क्योंकि सभी कोड तत्काल अधिभारित होते हैं और उदाहरण के लिए एक सरणी या हजारों कक्षाओं के साथ एक डीटीओ पैटर्न का उपयोग करते हुए, सरल वस्तुओं।

नीरस ढंग से, माइकल

+0

क्या डोम ओवरहेड? एक वर्ग एक वस्तु है और यदि यह डोम में कुछ भी नहीं बनाता है तो पदचिह्न वहां नहीं जायेगा। वस्तुओं को भी संदर्भ द्वारा पारित किया जाता है और विरासत अन्य वस्तुओं से प्रतिलिपि नहीं लेती है (जब तक कि आप 'लागू नहीं करते', जिस बिंदु पर यह ऑब्जेक्ट कुंजी कॉपी करेगा)। आपका उपयोग केस क्या होगा? सैकड़ों या हजारों वर्ग एक विरोधी पैटर्न की तरह लगते हैं। सबसे बड़ा पदचिह्न निर्माण/प्रसंस्करण समय के साथ-साथ सभी विधि लपेटने वाला होगा ... कृपया अपनी आवश्यकताओं के बारे में थोड़ा विस्तार करें –

+0

आपकी टिप्पणी के लिए धन्यवाद। मेरा उपयोग केस जो मैं कल्पना कर रहा हूं वह सर्वर से डेटा सेट को डीटीओ ऑब्जेक्ट में मैप कर रहा है। यह सूची कोई लंबाई हो सकती है। तो मैं सोच रहा हूं कि {} -स्टाइल ऑब्जेक्ट्स की सरणी रखने के बजाय, प्रत्येक के लिए, उदाहरण के लिए एक पोस्टकोड डीटीओ का उदाहरण दें और इसे इसके बजाय सरणी में रखें। मूल रूप से एक डीटीओ ऑब्जेक्ट में रिटर्न आइटम को लपेटकर उदाहरण के लिए कक्षा के लिए गुण मिश्रण और गेटर्स और सेटर्स इत्यादि के साथ एक प्रोबियर डीटीओ बनाएं –

+0

लगता है जैसे आप [शिपयार्ड] जैसे कुछ अपनाने (https://github.com/seanmonstar/ शिपयार्ड) या [न्यूरो] (https://github.com/GCheung55/Neuro) या यहां तक ​​कि एम्बर या बैकबोन - एक मॉडल -> संग्रह संरचना और बस अपने मॉडल को परिभाषित करें, फिर उन्हें किसी भी उद्देश्य के लिए संग्रह और फसल की घटनाओं में संभालने दें/राय। –

उत्तर

1

ठीक है। यहां मैं यह कैसे देखता हूं। सबसे पहले, @keeto से एक उद्धरण:

उत्तम दर्जे का

'' आखिरी हिस्सा रह महत्वपूर्ण है। जबकि कक्षा मॉड्यूलर कोड को लागू करने का एक बहुत अच्छा तरीका है, लेकिन वे ऐसा करने का एकमात्र तरीका नहीं हैं। मुझे लगता है कि कुछ डेवलपर्स के लिए कक्षाओं का उपयोग करने के लिए आजकल एक अशिष्ट प्रवृत्ति है। प्रोवर्बियल हथौड़ा की तरह, कक्षाओं का उपयोग प्रत्येक कोडिंग नाखून के लिए किया जा रहा है-जो दुर्भाग्यपूर्ण है, क्योंकि सभी चीजें कक्षाएं नहीं होती हैं।

कक्षाएं पुन: प्रयोज्य कोड बनाने के लिए बहुत बढ़िया हैं जिनका उपयोग परियोजनाओं में किया जा सकता है, और मैं व्यक्तिगत रूप से उन मानदंडों से चिपक जाता हूं। जब तक मुझे यकीन नहीं है कि जो कुछ मैं इमारत कर रहा हूं, उसे एक से अधिक बार उपयोग किया जाएगा, मैं इसे कक्षा में नहीं बदलूंगा। और यदि आपने ध्यान नहीं दिया है, तो आप एक कस्टम क्लास को परिभाषित किए बिना MooTools का उपयोग कर सकते हैं। आखिरकार, सिर्फ इसलिए कि म्यूटूल के पास कक्षाएं हैं इसका मतलब यह नहीं है कि आपको जावास्क्रिप्ट में जावा की तरह कोड करना होगा। * ''


स्रोत: http://keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools

यह बहुत व्यक्तिपरक के रूप में यह काफी हद तक है कि कैसे आप सामान्य रूप में अपनी कक्षाओं और जावास्क्रिप्ट लिखने पर निर्भर करता है।

कक्षा का उपयोग करना बिना दंड और ओवरहेड के है। आपके द्वारा तत्काल कक्षा के प्रकार पर आश्रित, यह अलग होगा। उदाहरण के लिए, यदि आपकी कक्षा एक साधारण डेटा अमूर्त है जो अन्य वस्तुओं या आउटपुट को डोम को स्पर्श नहीं करती है, तो यह उदाहरण बनाने के लिए अपेक्षाकृत सस्ता है। लागत प्रसंस्करण विकल्प वस्तुओं और (कभी-कभी) आपके इंस्टेंस कन्स्ट्रक्टर में गुणों की प्रतिलिपि बनाने के आसपास होगी।

कक्षा परिभाषा ही के दौरान, MooTools सभी निर्माता वस्तु गुण के माध्यम से लूप करता है और सभी विशेष लोगों और mutators के साथ सौदा करने की कोशिश करता है (जैसे, initialize, Implements, Extends, binds (-अधिक से) आदि)। हालांकि, यह एक बंद है। एक बार कन्स्ट्रक्टर फ़ंक्शन बनाया गया है, तो आप इसे तेजी से उपयोग कर सकते हैं।

यह कुछ और भी करेगा - यह उन सभी गुणों को लपेट देगा जिनके पास कार्य मूल्य हैं ताकि आप उन्हें निजी रूप से सजाने के लिए (वर्तमान में .protect() के माध्यम से) को सजाने के लिए तैयार कर सकें) ताकि आपके द्वारा चलाए जाने वाले किसी भी फ़ंक्शन आपके लिए चिंतित हो जाए। इसके अतिरिक्त, आप अक्सर .bind() का उपयोग विधि सजावट के रूप में भी करते हैं, जिसका अर्थ है कि वास्तविक कोड के लिए 2 रैपर चलते हैं।

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

घटनाक्रम, ईवेंट श्रोताओं और आगे भी ढेर हो सकते हैं। वस्तुओं के सहेजे गए संदर्भ समय के साथ ढेर होंगे।

फिर, वर्गों है कि, तत्वों डोम घटनाओं को जोड़ने,, घटनाओं को सुनने के लिए अपने स्वयं के ईवेंट निर्यात करने के लिए बाध्य कर रहे हैं ...

यह सब एक साथ रखो और यह कुछ हद तक महंगा हो सकता है। आप ऑब्जेक्ट्स बना रहे हैं जो कई जगहों से (उम्मीद है कि प्रोटोटाइप श्रृंखला के माध्यम से संदर्भ में) प्राप्त करते हैं। इसके बावजूद, आपके वर्ग के रचनाकारों की परिभाषा स्वयं तेज़ है और यह तब तक नहीं रहेगी जब तक आप ऐसी कई घटनाएं नहीं बनाते जब चीजें दिलचस्प हो रही हों और परीक्षण के लिए एक आधुनिक ब्राउज़र डालें।

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