2012-04-25 8 views
65

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

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

+4

मुझे नहीं लगता कि यह प्रश्न अत्यधिक अस्पष्ट या सामान्य है। यह एक लोकप्रिय जावास्क्रिप्ट ढांचे के उपयोग के मामले को संबोधित कर रहा है। –

+2

को छोटी और बड़ी दोनों परियोजनाओं के लिए बेहतर लगता है; बाध्यकारी प्रदर्शन बहुत अधिक है और अच्छी तरह से पैमाने पर। बैकबोन एक माइक्रो फ्रेमवर्क है जो आपको वही मॉडल-व्यू अपडेट कोड लिखने के लिए मजबूर करता है जबकि किसी भी तरह से "वसा इंटरफ़ेस" बेस क्लास के उपयोग को मजबूर करता है ताकि आप हुक ओवरराइड कर सकें। – AlexG

उत्तर

70

मेरी (छोटी) से comparison of Knockout and Backbone:

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

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

+37

बड़े जावास्क्रिप्ट ऐप्स को स्वयं की समस्या नहीं बना रहा है? – tugberk

+0

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

35

आपको फैशन रुझानों की तरह वेब एप्लिकेशन रुझान मिलेंगे, बहुत सारी राय की चर्चा की जा सकती है। अधिकांश समय, कोई सही या गलत जवाब नहीं है। लेकिन हर किसी की अपनी निजी शैली होती है, और आपको बस अपना ढूंढना होगा।

व्यक्तिगत रूप से, मुझे नॉकआउट और बैकबोन दोनों पसंद हैं और यह जानकर प्रसन्नता हुई कि आपको वास्तव में उनके बीच चयन नहीं करना है; आप "नॉकबैक" नामक एक प्लगइन का उपयोग कर सकते हैं जो उन्हें अच्छी तरह से पुल करता है।

मैं नॉकआउट की घोषणात्मक बाइंडिंग के साथ बैकबोन की एमवीपी संरचना का आनंद लेता हूं। I wrote a blog entry about this, कुछ उदाहरणों के साथ, यदि आप और जानना चाहते हैं।

विशाल परिसर DOMS पर नॉकआउट के प्रदर्शन हिट के लिए के रूप में, आप के आसपास काम कर सकते हैं कि विशिष्ट डोम तत्वों को अपने बाइंडिंग सीमित करने के बजाय विश्व स्तर पर लगाने से:

ko.applyBindings(myViewModel, $('#myElement')[0]); 

[0] अंत में आवश्यक है क्योंकि नॉकआउट एक डीओएम तत्व की अपेक्षा करता है, न कि jQuery पैरामीटर को दूसरे पैरामीटर के रूप में।

+4

अंतिम होना चाहिए [0] के बाद जाना? –

+17

यदि आपको किसी DOM तत्व की आवश्यकता है, तो बस DOM तत्व को पकड़ें: 'document.getElementById ('myElement')'। jQuery अच्छा है, लेकिन कच्चे तत्व को तुरंत निकालने के लिए इसका उपयोग करने का कोई मतलब नहीं है। – keithjgrant

+5

उचित बिंदु। अनुकूलन के लिए धन्यवाद। :) एफडब्ल्यूआईडब्लू, इसे लिखने के बाद, मैंने https://github.com/theironcook/Backbone.ModelBinder –

3

बड़े पैमाने पर जावास्क्रिप्ट अनुप्रयोगों का कोड संगठन एक चुनौतीपूर्ण समस्या है और आप किस ढांचे का उपयोग करते हैं, उससे काफी स्वतंत्र है - जब तक ढांचा बहुत अधिक विचारधारात्मक संरचना प्रदान नहीं करता है।

न तो Backbone.js और नॉकआउट.जेएस को ध्यान में रखते हुए निर्देशिका संरचना, या अनुशंसित जीवन चक्र प्रबंधन पद्धति की सिफारिश की गई है और किसी के संबंध में किसी भी गायब कार्यक्षमता में समुदाय समर्थित प्लगइन या स्टैंड-अलोन माइक्रोफ्रेमवर्क के साथ भर दिया जा सकता है, वहां एप्लिकेशन के आकार/जटिलता के संदर्भ में किसी दूसरे से बेहतर मानने में गंभीरता से कोई मुद्दा नहीं है।

एक पक्ष नोट पर यदि कोई वर्तमान में बड़े पैमाने पर जावास्क्रिप्ट एप्लिकेशन से शुरू कर रहा है, तो Angular.js का उपयोग करके नॉकआउट.जेएस से अधिक उपयुक्त हो सकता है यदि आप घोषणात्मक दृष्टिकोण, डीओएम विशेषता आधारित डेटा-बाध्यकारी और एमवीवीएम पैटर्न पसंद करते हैं, और यदि आप एमवीसी और स्ट्रिंग आधारित (हैंडलबार) टेम्पलेट्स पसंद करते हैं तो Ember.js Backbone.js से अधिक उपयुक्त हो सकता है। दोनों सक्रिय विकास में हैं और सुविधाओं के संबंध में कंधे से कंधे की तुलना करते हैं, और विशेष रूप से उन लोगों की समस्याओं को कम करने के लिए डिज़ाइन किए गए थे जो लोगों को बैकबोन और नॉकआउट जैसे छोटे ढांचे के साथ बड़े अनुप्रयोगों के साथ काम करने का सामना करना पड़ रहा था, जो पहले आया था।

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