कैसे तय करें कि Node.js का उपयोग कब करें?


2195

मैं इस तरह के सामान के लिए नया हूं, लेकिन हाल ही में मैं बहुत कुछ सुन रहा हूं कि Node.js कितना अच्छा है। सामान्य रूप से jQuery और जावास्क्रिप्ट के साथ काम करना मुझे कितना पसंद है, यह देखते हुए, मैं मदद नहीं कर सकता, लेकिन आश्चर्य होगा कि Node.s.s. मेरे पास जो वेब एप्लिकेशन है वह बिटली की तरह कुछ है - कुछ सामग्री लेता है, इसे संग्रहीत करता है।

पिछले कुछ दिनों से मैं जो भी होमवर्क कर रहा था, उससे मुझे निम्नलिखित जानकारी मिली। Node.js

  • एक कमांड-लाइन टूल है जिसे एक नियमित वेब सर्वर के रूप में चलाया जा सकता है और एक जावास्क्रिप्ट प्रोग्राम को चलाने देता है
  • महान V8 जावास्क्रिप्ट इंजन का उपयोग करता है
  • बहुत अच्छा है जब आपको एक ही समय में कई काम करने की आवश्यकता होती है
  • ईवेंट-आधारित है, इसलिए सभी अद्भुत अजाक्स -जैसे सामान सर्वर साइड पर किए जा सकते हैं
  • हमें ब्राउज़र और बैकएंड के बीच कोड साझा करने देता है
  • हमें MySQL के साथ बात करने देता है

कुछ स्रोत जो मेरे पास आए हैं, वे हैं:

यह देखते हुए कि Node.js को Amazon के EC2 इंस्टेंस पर लगभग आउट-ऑफ-द-बॉक्स चलाया जा सकता है , मैं यह समझने की कोशिश कर रहा हूं कि PHP , Python और Ruby के किसी भी शक्तिशाली राजा के विपरीत Node.js को किस प्रकार की समस्याओं की आवश्यकता है। । मैं समझता हूं कि यह वास्तव में एक भाषा पर विशेषज्ञता पर निर्भर करता है, लेकिन मेरा सवाल सामान्य श्रेणी में अधिक आता है: किसी विशेष रूपरेखा का उपयोग कब करना है और यह किस प्रकार की समस्याओं के लिए विशेष रूप से अनुकूल है?


4
इस सवाल पर मेटा ( meta.stackoverflow.com/q/332386/497418 ) पर चर्चा की जा रही है ।
zzzzBov

जवाबों:


1355

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

इसका मतलब है कि आप Node.js में एक ब्राउज़र-आधारित चैट एप्लिकेशन बना सकते हैं जो कि कई महान ग्राहकों की सेवा के लिए लगभग कोई सिस्टम संसाधन नहीं लेता है। जब भी आप इस तरह का लंबे समय तक मतदान करना चाहते हैं, तो Node.js एक बढ़िया विकल्प है।

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

मैं यहां अन्य उत्तरों को पढ़ने के लिए उत्सुक हूं, यह एक शानदार सवाल है।

यह इंगित करने योग्य है कि Node.js उन स्थितियों के लिए भी बहुत अच्छा है जिसमें आप क्लाइंट / सर्वर गैप में बहुत सारे कोड का पुन: उपयोग कर रहे होंगे। उल्का ढांचे यह वास्तव में आसान बनाता है और लोगों का एक बहुत कुछ सुझाव दे रहे हैं इस वेब विकास के भविष्य हो सकता है। मैं अनुभव से कह सकता हूँ कि उल्का में कोड लिखने में बहुत मज़ा आता है, और इसका एक बड़ा हिस्सा यह सोचने में कम समय बिता रहा है कि आप अपने डेटा का पुनर्गठन कैसे कर रहे हैं, इसलिए कोड जो ब्राउज़र में चलता है वह आसानी से हो सकता है इसे हेरफेर करें और इसे वापस पारित करें।

यहां पिरामिड और लंबे समय के मतदान पर एक लेख दिया गया है, जो कि जियोवेंट की थोड़ी मदद से स्थापित करना बहुत आसान हो जाता है: टिकटैकटोई और पिरामिड के साथ लंबा मतदान


12
हां, मुझे लगता है कि यह सोचना बहुत महत्वपूर्ण है कि 'नोड.जेएस उन अनुप्रयोगों के लिए विशेष रूप से अनुकूल है जिन्हें ब्राउज़र से सर्वर पर लगातार कनेक्शन की आवश्यकता होती है। - जैसे कि चैट प्रोग्राम, या इंटरएक्टिव गेम्स 'यदि कोई सिर्फ एक ऐसा एप्लिकेशन बना रहा है, जिसे जरूरी नहीं कि यूजर / सर्वर कम्युनिकेशन की जरूरत हो, तो अन्य फ्रेमवर्क के साथ विकसित करना ठीक होगा और इसमें बहुत कम समय लगेगा।
user482594

1
इसके लिए धन्यवाद ... ग्रेट क्यू और ए;; मैं इसके बारे में भी सोचता हूं कि दोनों अलग-अलग लोगों के लिए एक महान तकनीक को माहिर करने के मामले में कुछ अलग-अलग लोगों पर;)
स्टोकआउट

12
लंबे मतदान का उपयोग क्यों करें? भविष्य और सॉकेट्स का क्या हुआ ?
hitautodestruct

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

409

मेरा मानना ​​है कि Node.js वास्तविक समय के अनुप्रयोगों के लिए सबसे उपयुक्त है: ऑनलाइन गेम, सहयोग उपकरण, चैट रूम, या कुछ भी जहां उपयोगकर्ता (या रोबोट? या सेंसर?) क्या करता है, आवेदन को तुरंत अन्य उपयोगकर्ताओं द्वारा देखा जाना चाहिए? बिना पेज रिफ्रेश किए।

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

लेकिन मुझे यह भी उल्लेख करना चाहिए कि बस किसी भी स्थिति के बारे में जहां कोड थ्रेड्स के कारण ब्लॉक हो सकता है, को Node.js. के साथ बेहतर तरीके से संबोधित किया जा सकता है। या किसी भी स्थिति में जहां आपको एप्लिकेशन को इवेंट-संचालित करने की आवश्यकता होती है।

इसके अलावा, रयान डाहल ने एक बातचीत में कहा कि मैंने एक बार भाग लिया था कि नियमित पुराने HTTP अनुरोधों के लिए Node.js के बेंचमार्क निकट प्रतिद्वंद्वी Nginx को देखते हैं। इसलिए यदि हम Node.js के साथ निर्माण करते हैं, तो हम अपने सामान्य संसाधनों को प्रभावी ढंग से सेवा दे सकते हैं, और जब हमें इवेंट-संचालित सामान की आवश्यकता होती है, तो वह इसे संभालने के लिए तैयार है।

इसके अलावा यह सभी जावास्क्रिप्ट हर समय है। पूरे स्टैक पर लिंगुआ फ्रेंका।


17
.Net और नोड के बीच स्विच करने वाले किसी व्यक्ति से बस एक अवलोकन, सिस्टम के विभिन्न क्षेत्रों के लिए अलग-अलग भाषाएं संदर्भ-स्विचिंग के दौरान बहुत बड़ी मदद करती हैं। जब मैं जावास्क्रिप्ट को देख रहा हूं, तो मैं क्लाइंट में काम कर रहा हूं, C # का अर्थ है App सर्वर, SQL = डेटाबेस। जावास्क्रिप्ट में काम करना, मैंने खुद को परतों को भ्रमित करते हुए पाया है, या बस संदर्भ-स्विच में अधिक समय ले रहा हूं। यह संभवत: पूरे दिन .NET स्टैक पर काम करने और रात में एनोडिंग की एक कलाकृति है, लेकिन इससे फर्क पड़ता है।
माइकल ब्लैकबर्न

9
दिलचस्प बात यह है कि मुख्यधारा और देशी संस्कृतियों के बीच बढ़ने पर बोलियों को बदलने वाले क्रॉस-कल्चरल व्यक्तियों के अभ्यास को "कोड-स्विचिंग" कहा जाता है।
माइकल ब्लैकबर्न

1
बस दूसरे दिन मैं इस बारे में सोच रहा था कि कैसे मैं .jsकिसी तरह अपनी अलग-अलग फाइलों को अलग-अलग रंगों के असाइन करने के बारे में जा सकता हूं । क्लाइंट-साइड के लिए हरा, सर्वर-साइड के लिए नीला। मैं अपने आप को "खो" रहा हूं।
एजेबी

209

NodeJS का उपयोग करने के कारण:

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

  • एकल थ्रेड घटना चालित प्रणाली है तेजी से भी पारंपरिक मल्टी-थ्रेडेड की तुलना में जब एक बार में अनुरोध के बहुत सारे से निपटने, और भी सरल, जावा या ROR चौखटे।

  • क्लाइंट और सर्वर-साइड लाइब्रेरी / मॉड्यूल, साथ ही वेब विकास के लिए कमांड-लाइन टूल सहित एनपीएम के माध्यम से सुलभ संकुल के बढ़ते पूल । इनमें से अधिकांश को आसानी से जीथब पर होस्ट किया जाता है, जहां कभी-कभी आप किसी मुद्दे को रिपोर्ट कर सकते हैं और इसे घंटों के भीतर तय कर सकते हैं! मानकीकृत समस्या रिपोर्टिंग और आसान फ़र्किंग के साथ, एक ही छत के नीचे सब कुछ होना अच्छा है।

  • यह डिफेक्टो मानक वातावरण बन गया है जिसमें जावास्क्रिप्ट से संबंधित उपकरण और अन्य वेब से संबंधित उपकरण चलाने के लिए , जिसमें टास्क रनर, मिनिफाइज़र, ब्यूटीफायर, लिंटर, प्रीप्रोसेसर, बंडलर्स और एनालिटिक्स प्रोसेसर शामिल हैं।

  • यह प्रोटोटाइप, फुर्तीली विकास और तेजी से उत्पाद पुनरावृत्ति के लिए काफी उपयुक्त लगता है ।

NodeJS का उपयोग करने के कारण :

  • यह जावास्क्रिप्ट चलाता है, जिसकी कोई संकलन-समय प्रकार की जाँच नहीं है। बड़े, जटिल सुरक्षा-महत्वपूर्ण प्रणालियों, या विभिन्न संगठनों के बीच सहयोग सहित परियोजनाएं, एक भाषा जो संविदात्मक इंटरफेस को प्रोत्साहित करती है और स्थिर प्रकार की जाँच प्रदान करती है जो आपको लंबे समय में कुछ डिबगिंग समय (और विस्फोट ) से बचा सकती है । (हालांकि JVM के साथ फंस गया है null, इसलिए कृपया अपने परमाणु रिएक्टरों के लिए हास्केल का उपयोग करें।)

  • इसके अलावा, एनपीएम में कई पैकेज थोड़े कच्चे हैं , और अभी भी तेजी से विकास के अधीन हैं। पुराने ढांचे के लिए कुछ पुस्तकालयों में परीक्षण और बगफिक्सिंग के एक दशक से गुजरना पड़ा है, और अब तक बहुत स्थिर हैं। Npmjs.org के पास पैकेजों को रेट करने के लिए कोई तंत्र नहीं है , जिसके कारण पैकेजों का प्रसार कम या ज्यादा हो रहा है, जिसमें से बड़े प्रतिशत का रखरखाव नहीं किया जाता है।

  • नेस्टेड कॉलबैक नरक। (बेशक इस के 20 अलग-अलग समाधान हैं ...)

  • कभी-कभी बढ़ते हुए पूल एक NodeJS परियोजना को अगले से मौलिक रूप से अलग कर सकते हैं । वहाँ उपलब्ध विकल्पों में से बड़ी संख्या में (जैसे एक्सप्रेस / के कारण कार्यान्वयन में एक बड़ी विविधता है Sails.js / उल्का / डर्बी )। यह कभी-कभी किसी नए डेवलपर के लिए नोड प्रोजेक्ट पर कूदना कठिन बना सकता है। इसके विपरीत कि एक रेल डेवलपर के साथ एक मौजूदा परियोजना में शामिल होने के लिए: वह बहुत जल्दी एप्लिकेशन से परिचित होने में सक्षम होना चाहिए, क्योंकि सभी रेल एप्लिकेशन को एक समान संरचना का उपयोग करने के लिए प्रोत्साहित किया जाता है ।

  • फाइलों से निपटना थोड़ा दर्द भरा हो सकता है। अन्य भाषाओं में जो चीजें तुच्छ हैं, जैसे एक पाठ फ़ाइल से एक पंक्ति पढ़ना, Node.js के साथ करने के लिए काफी अजीब है कि वहाँ पर एक StackOverflow सवाल है कि 80+ upvotes के साथ। CSV फ़ाइल से एक बार में एक रिकॉर्ड पढ़ने का कोई सरल तरीका नहीं है । आदि।

मुझे NodeJS बहुत पसंद है, यह तेज़ और जंगली और मज़ेदार है, लेकिन मुझे इस बात की चिंता है कि इसे साबित करने में बहुत कम रुचि है। आइए आशा करते हैं कि हम अंततः दोनों दुनिया के सर्वश्रेष्ठ विलय कर सकते हैं। मैं यह देखने के लिए उत्सुक हूं कि भविष्य में नोड की जगह क्या लेगा ... :)


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

1
@ कर्विन, मैं मानता हूं कि कुछ बेंचमार्क बहुत अच्छे होंगे, लेकिन मैं इस बात से निराश था कि मुझे ऑनलाइन क्या मिल सकता है। कुछ ने तर्क दिया है कि .NET का प्रदर्शन नोड्स के साथ तुलनात्मक है, लेकिन यह महत्वपूर्ण है कि आप वास्तव में क्या कर रहे हैं। नोड कई समवर्ती कनेक्शन के साथ छोटे संदेश देने में महान हो सकता है, लेकिन भारी गणितीय गणना के लिए इतना महान नहीं है। एक अच्छे प्रदर्शन की तुलना के लिए विभिन्न स्थितियों का परीक्षण करना होगा।
joeytwiddle

2
@joeytwield टाइपस्क्रिप्ट जैसी चीजें नहीं होतीं, जब यह बड़े जटिल कार्यक्रमों और स्थिर टाइपेकिंग को संभालने के लिए नोड की मदद करती है?
कोडमोंकी

2
@joeytwiddle क्या इसके लायक है, आप यह निर्धारित करने के लिए stillmaintain.com का उपयोग कर सकते हैं कि क्या npm पैकेज अभी भी बनाए रखा है या नहीं (जैसा कि बहुमत github पर हैं)। इसके अलावा, npm searchऔर npm showआपको एक पैकेज के अंतिम रिलीज की तारीख दिखाएगा।
डैन पेंट्री

3
रेल की तुलना नोड से करने से आप एक मंच को एक फ्रेमवर्क में भ्रमित कर रहे हैं। रेल रूबी के लिए एक रूपरेखा है जैसे पाल और उल्का जावास्क्रिप्ट के लिए रूपरेखा हैं।
बोनसाईऑक

206

इसे छोटा करने के लिए:

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

Node.js में ईवेंट लूप के बारे में एक अच्छा लेख मिक्सू का टेक ब्लॉग है: नोड.जेएस ईवेंट लूप को समझना


127

मेरे पास एक वास्तविक दुनिया का उदाहरण है जहां मैंने Node.js. का उपयोग किया है जिस कंपनी में मैं काम करता हूं, उसे एक क्लाइंट मिला, जो एक साधारण स्टेटिक HTML वेबसाइट चाहता था। यह वेबसाइट पेपल का उपयोग करके एक आइटम बेचने के लिए है और ग्राहक एक काउंटर भी चाहते थे जो कि बेची गई वस्तुओं की मात्रा दर्शाता है। क्लाइंट को इस वेबसाइट पर भारी मात्रा में आगंतुकों के आने की उम्मीद है। मैंने Node.js और Express.js ढांचे का उपयोग करके काउंटर बनाने का निर्णय लिया ।

Node.js आवेदन सरल था। एक रेडिस डेटाबेस से बेची गई आइटम राशि प्राप्त करें, जब आइटम बेचा जाता है तो काउंटर बढ़ाएं और एपीआई के माध्यम से उपयोगकर्ताओं को काउंटर मूल्य की सेवा दें ।

कुछ कारणों से मैंने इस मामले में Node.js का उपयोग करना क्यों चुना

  1. यह बहुत हल्का और तेज है। तीन हफ्तों में इस वेबसाइट पर 200000 से अधिक दौरे आए हैं और न्यूनतम सर्वर संसाधन यह सब संभालने में सक्षम रहे हैं।
  2. काउंटर वास्तविक समय बनाने के लिए वास्तव में आसान है।
  3. Node.js को कॉन्फ़िगर करना आसान था।
  4. बहुत सारे मॉड्यूल मुफ्त में उपलब्ध हैं। उदाहरण के लिए, मुझे PayPal के लिए एक Node.js मॉड्यूल मिला।

इस मामले में, Node.js एक भयानक विकल्प था।


7
आप कुछ ऐसा कैसे होस्ट करते हैं? आप उत्पादन सर्वर पर फिर नोडज सेटअप करने के लिए है? लिनक्स में?
मिगुएल स्टीवंस

1
नोडजित्सु और हरोकू जैसे कुछ पासा हैं। या आप वास्तव में एक बॉक्स पर अर्थात् amazon ec2 से नोडज सेट कर सकते हैं। देखें: lauradhamilton.com/…
harry युवा

13
1,814,400 सेकंड के भीतर 200,000 विज़िट। प्रासंगिक नहीं है। यहां तक ​​कि बैश भी कई अनुरोधों को, सबसे धीमी सर्वर पर सेवा दे सकता है। स्क्रैच सर्वर। सबसे धीमी वी.एम.
तिबेरिउ-आयनो स्टेन

105

नोड का उपयोग करके अपनी अगली परियोजना शुरू करने के लिए सबसे महत्वपूर्ण कारण ...

  • सभी सबसे अच्छे दोस्त इसमें हैं ... इसलिए इसे मज़ेदार होना चाहिए।
  • आप कूलर पर हैंगआउट कर सकते हैं और इसके बारे में डींग मारने के लिए बहुत सारे नोड रोमांच हैं।
  • जब आप क्लाउड होस्टिंग लागतों की बात करते हैं तो आप एक पैसा लगाने वाले होते हैं।
  • वहाँ किया गया कि रेल के साथ
  • आप IIS परिनियोजन से घृणा करते हैं
  • आपकी पुरानी आईटी नौकरी सुस्त हो रही है और आप चाहते हैं कि आप एक चमकदार नए स्टार्ट अप में हों।

क्या उम्मीद ...

  • आप बिना ज़रूरी सभी सर्वर ब्लोटवेयर के बिना एक्सप्रेस के साथ सुरक्षित और सुरक्षित महसूस करेंगे।
  • रॉकेट की तरह चलता है और अच्छी तरह से तराजू।
  • आप इसका सपना देखते हैं। आपने इसे स्थापित किया। नोड पैकेज रेपो npmjs.org दुनिया में ओपन सोर्स लाइब्रेरी का सबसे बड़ा पारिस्थितिकी तंत्र है।
  • आपके दिमाग को नेस्टेड कॉलबैक की भूमि में समय मिलेगा ...
  • ... जब तक आप अपना वादा निभाना नहीं सीखते ।
  • Sequelize और Passport आपके नए API मित्र हैं।
  • ज्यादातर async कोड को डीबग करना umm ... दिलचस्प होगा
  • सभी Noders के लिए समय में महारत हासिल करने टाइपप्रति

इसका उपयोग कौन करता है?


18
हां, मैं इस प्रश्न का उत्तर पारंपरिक तरीके से दे सकता था। मुझे लगता है कि मैं ऐसा करने के लिए योग्य हूं, लेकिन ज्यादातर यह पहले ही कहा जा चुका है और मुझे लगा कि कुछ हल्के-फुल्के मजाक से एकरसता टूट जाएगी। मैं नियमित रूप से अन्य प्रश्नों पर तकनीकी उत्तरों का योगदान देता हूं।
टोनी ओ'हागन

1
नेस्टेड कॉलबैक के लिए एस्सिटी कोड के लिए ES6 जनरेटर का उपयोग करके बचा जा सकता है
रिफैक्टर

1
@CleanCrispCode: हाँ वास्तव में! ES6 ने C # स्टाइल को अपनाया है async/ awaitइसलिए अब हम बहुत क्लीनर async नोड कोड को रोल आउट कर सकते हैं जो पारंपरिक try/ का भी समर्थन करता है catch। 2016/17 में जेएस कोडर्स ES6 पर स्विच कर रहे हैं।
टोनी ओ'हागन

1
दस हज़ार बार यह "आप सुरक्षित और सुरक्षित महसूस करेंगे, बिना किसी सर्वर ब्लोटवेयर के साथ एक्सप्रेस के साथ आप की ज़रूरत नहीं है"
सिमोन पोगी

60

सिल्वर बुलेट जैसा कुछ नहीं है। सब कुछ इसके साथ जुड़े कुछ लागत के साथ आता है। यह ऐसा है जैसे यदि आप तैलीय भोजन खाते हैं, तो आप अपने स्वास्थ्य के साथ समझौता करेंगे और स्वस्थ भोजन तैलीय भोजन जैसे मसालों के साथ नहीं आता है। यह व्यक्तिगत पसंद है कि वे अपने भोजन में स्वास्थ्य या मसाले चाहते हैं या नहीं। उसी तरह Node.js विशिष्ट परिदृश्य में उपयोग किए जाने पर विचार करते हैं। यदि आपका ऐप उस परिदृश्य में फिट नहीं है, तो आपको अपने ऐप के विकास के लिए इस पर विचार नहीं करना चाहिए। मैं बस अपना विचार उसी पर रख रहा हूं:

Node.JS का उपयोग कब करें

  1. यदि आपके सर्वर साइड कोड को बहुत कम सीपीयू चक्रों की आवश्यकता होती है। दूसरी दुनिया में आप नॉन ब्लॉकिंग ऑपरेशन कर रहे हैं और भारी एल्गोरिथ्म / जॉब नहीं है, जिसमें बहुत सारे सीपीयू साइकल की खपत होती है।
  2. यदि आप जावास्क्रिप्ट बैक ग्राउंड से हैं और क्लाइंट साइड JS की तरह ही सिंगल थ्रेडेड कोड लिखने में सहज हैं।

जब Node.JS का उपयोग नहीं करना है

  1. आपका सर्वर अनुरोध भारी सीपीयू खपत एल्गोरिथ्म / नौकरी पर निर्भर है।

Node.JS के साथ स्केलेबिलिटी कंसीडरेशन

  1. नोड.जेएस स्वयं अंतर्निहित सिस्टम के सभी कोर का उपयोग नहीं करता है और यह डिफ़ॉल्ट रूप से थ्रेडेड है, आपको मल्टी कोर प्रोसेसर का उपयोग करने और इसे बहु थ्रेडेड बनाने के लिए अपने द्वारा तर्क लिखना होगा।

Node.JS अल्टरनेटिव

Node.JS के स्थान पर उपयोग करने के लिए अन्य विकल्प हैं। हालांकि, Vert.x सुंदर होनहार लगता है और इसमें पॉलीगोट और बेहतर स्केलेबिलिटी विचार जैसे कई अतिरिक्त विशेषताएं हैं।


24
मैं "यदि आपके सर्वर साइड अनुरोध में फ़ाइल IO या सॉकेट IO" जैसे अवरुद्ध ऑप्स शामिल हैं, तो "जब उपयोग नहीं करना है" में सूचीबद्ध नहीं हूं। अगर मेरी समझ सही है, तो नोड की एक ताकत है। जेएस यह है कि इसमें शक्तिशाली एसिंक्रोनस साधन हैं जो बिना अवरुद्ध किए आईओ को संभाल सकते हैं। तो Node.js को IO को अवरुद्ध करने के लिए "एक इलाज" के रूप में देखा जा सकता है।
ओन्ड्रेज पीटरका

3
@OndraPeterka: आप सही कह रहे हैं कि Node.js सर्वर IO को ब्लॉक करने के लिए ठीक है, हालाँकि यदि सर्वर पर आपका अनुरोध हैंडलर स्वयं करता है तो यह किसी अन्य वेब सेवा / फ़ाइल संचालन के लिए एक अवरुद्ध कॉल कर रहा है, Node.js यहाँ मदद नहीं करेगा। यह न केवल सर्वर के लिए आने वाले अनुरोधों के लिए बल्कि आपके ऐप अनुरोध हैंडलर से आउटगोइंग अनुरोध के लिए गैर अवरुद्ध IO है।
अजय तिवारी

4
@ajay from nodejs.org वे कहते हैं कि "नॉन-ब्लॉकिंग आई / ओ", कृपया अपने "व्हेन
नॉट

5
वर्तमान संस्करण के साथ, नोड वास्तव में क्लस्टर का उपयोग करके मल्टी-कोर समर्थन का समर्थन करता है। यह वास्तव में कम से कम दो बार नोड ऐप प्रदर्शन को बढ़ावा देता है। हालाँकि, मुझे लगता है कि जब वे क्लस्टर लिब को स्थिर करते हैं तो प्रदर्शन दो बार से अधिक होना चाहिए।
नाम गुयेन

4
आप भारी गणना के लिए नोड.जेएस का उपयोग कर सकते हैं। का उपयोग करें forkStackoverflow.com/questions/9546225/… देखें । नोड clusterमॉड्यूल के साथ कई कोर को बहुत अच्छी तरह से संभालता है । nodejs.org/api/cluster.html
जेस

41

एक और बड़ी बात जो मुझे लगता है कि किसी ने भी Node.js के बारे में उल्लेख नहीं किया है वह है अद्भुत समुदाय, पैकेज प्रबंधन प्रणाली (npm) और जो मॉड्यूल मौजूद हैं, उन्हें आप अपने पैकेज में शामिल कर सकते हैं।


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

3
सभी उचित सम्मान के साथ, npm पर बहुत सारे पैकेज भयानक हैं, क्योंकि npm में पैकेजों को रेट करने के लिए कोई तंत्र नहीं हैCPAN से किसी को संकेत ?
Dan Dascalescu

बहुत बुरा कोई भी वेबसोकेट पुस्तकालयों rfc 6455 विनिर्देशों को संतुष्ट नहीं कर सकता है। इस तथ्य को दिए जाने पर नोड.जेड के फैनबॉय बहरे, गूंगे और अंधे होते हैं।
r3wt

1
मुझे इस बारे में जानकारी नहीं है कि आपने कब टिप्पणी की थी, लेकिन अभी के रूप में ws पुस्तकालय उस कल्पना का समर्थन करता है
जोनाथन ग्रे

37

मेरा टुकड़ा: नोडज रियल टाइम सिस्टम जैसे कि एनालिटिक्स, चैट-एप्स, एपिस, एड सर्वर आदि बनाने के लिए बहुत अच्छा है। नर्क, मैंने 2 घंटे के तहत नोडज और सॉकेट.आईओ का उपयोग करके अपना पहला चैट ऐप बनाया और वह भी परीक्षा सप्ताह के दौरान!

संपादित करें

इसके कई साल हो गए हैं जब से मैंने नोडज का उपयोग करना शुरू किया है और मैंने इसका उपयोग स्टैटिक फाइल सर्वर, सरल एनालिटिक्स, चैट एप्स और बहुत कुछ सहित कई अलग-अलग चीजों को बनाने में किया है। नोडज का उपयोग कब करना है, यह मेरा विचार है

कब इस्तेमाल करें

सिस्टम बनाते समय जो कंफर्ट और स्पीड पर जोर देता है।

  • सॉकेट्स में केवल सर्वर जैसे चैट ऐप, irc ऐप आदि होते हैं।
  • सोशल नेटवर्क जो रियलटाइम संसाधनों जैसे कि जियोलोकेशन, वीडियो स्ट्रीम, ऑडियो स्ट्रीम आदि पर जोर देते हैं।
  • एनालिटिक्स वेबैप की तरह डेटा के छोटे हिस्से को बहुत तेजी से हैंडल करना।
  • एक रिस्ट केवल एपीआई को उजागर करने के रूप में।

जब उपयोग न हो

इसका एक बहुत ही बहुमुखी वेबसर्वर है ताकि आप इसे जहाँ चाहें उपयोग कर सकें लेकिन शायद इन जगहों पर नहीं।

  • सरल ब्लॉग और स्थिर साइटें।
  • बस एक स्थिर फ़ाइल सर्वर के रूप में।

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


सरल ब्लॉग अभी भी Node.js. से लाभ उठा सकते हैं स्थिर फ़ाइलों की सेवा के लिए, आप अभी भी Node.js का उपयोग कर सकते हैं और यदि लोड बढ़ता है, तो वर्तमान में सर्वोत्तम प्रथाओं के अनुसार, इसके सामने Nginx रिवर्स प्रॉक्सी जोड़ें। अपाचे httpd सर्वर एक डायनासोर है जो मर रहा है - यह नेटक्राफ्ट सर्वेक्षण देखें
9

मैं अन्यथा कहूंगा - ghost.org पर एक नज़र डालें , अद्भुत लग रहा है और NodeJs के शीर्ष पर बनाया गया है - सहयोग, रीयलटाइम लेख संपादन। इसके अलावा, NodeJS में एक साधारण पृष्ठ बनाने का उपयोग कर कहते हैं कि sailsjs.org , आसान, तेजी से है और आप सर्वर साइड प्रोग्रामिंग भाषाओं में से किसी सीखने के साथ खुद को परेशान करने के लिए की जरूरत नहीं है
बेरी

30

इसका उपयोग कहां किया जा सकता है

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

मोबाइल के मोर्चे पर, प्राइम-टाइम कंपनियों ने अपने मोबाइल समाधानों के लिए Node.js पर भरोसा किया है। क्यों देखें?

लिंक्डइन एक प्रमुख उपयोगकर्ता है। उनका पूरा मोबाइल ढेर Node.js. पर बनाया गया है। वे प्रत्येक भौतिक मशीन पर 15 इंस्टेंस के साथ 15 सर्वर चलाने से गए, केवल 4 उदाहरणों के लिए - जो यातायात को दोगुना कर सकते हैं!

ईबे ने HTTP API के लिए एक वेब क्वेरी भाषा ql.io लॉन्च की, जो Node.js को रनटाइम स्टैक के रूप में उपयोग करती है। वे एक नियमित डेवलपर-गुणवत्ता वाले उबंटू कार्य केंद्र को ट्यून करने में सक्षम थे, जो नोड के अनुसार प्रति प्रक्रिया 120,000 से अधिक सक्रिय कनेक्शनों को संभालता था। प्रत्येक कनेक्शन में 2kB मेमोरी की खपत होती थी!

वॉलमार्ट ने Node.js का उपयोग करने के लिए अपने मोबाइल एप्लिकेशन को फिर से इंजीनियर किया और अपने जावास्क्रिप्ट प्रसंस्करण को सर्वर पर धकेल दिया।

और अधिक पढ़ें: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/


20

समवर्ती अनुरोध से निपटने के लिए सबसे अच्छा नोड -

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

ओके ने सहमति व्यक्त की कि आप जावास्क्रिप्ट में अपना एपीआई लिख सकते हैं लेकिन क्या होगा अगर मैं उपरोक्त समस्या से ठीक हूं। क्या आपके पास बाकी एपीआई के लिए नोड का उपयोग करने का कोई अन्य कारण है?

तो यहाँ जादू शुरू होता है। हां मेरे पास हमारे एपीआई के लिए नोड का उपयोग करने के अन्य कारण हैं।

आइए अपने पारंपरिक बाकी एपीआई सिस्टम पर वापस जाएं जो कि ब्लॉकिंग ऑपरेशन या थ्रेडिंग पर आधारित है। मान लीजिए कि दो समवर्ती अनुरोध (आर 1 और आर 2) होते हैं, उनमें से प्रत्येक को डेटाबेस ऑपरेशन की आवश्यकता होती है। तो पारंपरिक प्रणाली में क्या होगा:

1. वेटिंग तरीका: हमारा सर्वर r1अनुरोध परोसना शुरू कर देता है और क्वेरी प्रतिक्रिया की प्रतीक्षा करता है। पूरा होने के बाद r1, सर्वर सेवा करना शुरू r2करता है और उसी तरह से करता है। इसलिए इंतजार करना अच्छा विचार नहीं है क्योंकि हमारे पास इतना समय नहीं है।

2. थ्रेडिंग वे: हमारा सर्वर अनुरोधों के लिए दो थ्रेड बनाता है r1और r2डेटाबेस को क्वेरी करने के बाद अपने उद्देश्य की पूर्ति करता है। इसलिए इसे तेजी से ठंडा करें। क्योंकि यह मेमोरी खपत है क्योंकि आप देख सकते हैं कि हमने दो थ्रेड शुरू किए हैं, समस्या तब बढ़ जाती है जब दोनों अनुरोध एक ही डेटा को क्वेरी कर रहे हों। फिर आपको डेडलॉक तरह के मुद्दों से निपटना होगा। इसलिए इसका इंतज़ार करने के तरीके से बेहतर है लेकिन अभी भी मुद्दे हैं।

अब यहाँ है, नोड यह कैसे करेगा:

3. नोडवे: जब समान समवर्ती अनुरोध नोड में आता है तो यह अपने कॉलबैक के साथ एक घटना को पंजीकृत करेगा और आगे बढ़ेगा यह किसी विशेष अनुरोध के लिए क्वेरी की प्रतिक्रिया की प्रतीक्षा नहीं करेगा। जब r1अनुरोध आता है तो नोड का ईवेंट लूप (हां एक ईवेंट लूप है) नोड में जो इस उद्देश्य को पूरा करता है।) अपने कॉलबैक फ़ंक्शन के साथ एक ईवेंट रजिस्टर r2करें और सेवारत अनुरोध के लिए आगे बढ़ें और इसी तरह अपने कॉलबैक के साथ ईवेंट को पंजीकृत करें। जब भी कोई प्रश्न समाप्त होता है, तो वह अपनी संबंधित घटना को ट्रिगर करता है और बिना किसी बाधा के पूरा करने के लिए अपने कॉलबैक को निष्पादित करता है।

तो कोई प्रतीक्षा नहीं, कोई थ्रेडिंग नहीं, कोई मेमोरी खपत नहीं है - हाँ यह आराम एपीआई की सेवा के लिए नोडवे है।


1
हाय अंशुल। क्या आप विस्तृत रूप से कुछ संसाधन सुझा सकते हैं या बता सकते हैं कि थ्रेडिंग तरीके से गतिरोध कैसे हो सकता है।
jsbisht

16

नए प्रोजेक्ट के लिए Node.js चुनने का मेरा एक और कारण है:

शुद्ध क्लाउड आधारित विकास करने में सक्षम हो

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

बेशक, अन्य भाषाओं या प्लेटफार्मों के लिए शायद क्लाउड आधारित आईडीई है (क्लाउड 9 आईडीई अन्य भाषाओं के लिए भी समर्थन जोड़ रहा है), लेकिन एनओडी.जेएस के विकास के लिए क्लाउड 9 का उपयोग करना मेरे लिए वास्तव में एक शानदार अनुभव है।


1
दरअसल Cloud9 IDE और अन्य (एक मैं उपयोग कर कोडिंग) लगभग सभी प्रकार की वेब भाषा का समर्थन करता है।
वानी मियारेली

7
क्या आप गंभीर हैं? यह एक ढेर चुनने के लिए मानदंड है? :) खुश है यह आपके लिए काम कर रहा है!
Matanster

15

एक और बात नोड प्रदान करती है, नोड की बाल प्रक्रिया ( चाइल्डप्रोसेस.फॉर्क () जो प्रत्येक में डॉक्स के अनुसार 10mb मेमोरी की आवश्यकता होती है ) का उपयोग करके नोड के कई v8 इंस्टेंसेस बनाने की क्षमता है , इस प्रकार सर्वर को चलाने वाली मुख्य प्रक्रिया को प्रभावित नहीं करती है। इसलिए एक पृष्ठभूमि नौकरी को लोड करने के लिए, जिसमें बड़े सर्वर लोड की आवश्यकता होती है, एक बच्चे का खेल बन जाता है और हम आसानी से उन्हें आवश्यकतानुसार मार सकते हैं।

मैं नोड का बहुत उपयोग कर रहा हूं और हमारे द्वारा बनाए जाने वाले अधिकांश एप्लिकेशन में एक ही समय में सर्वर कनेक्शन की आवश्यकता होती है, इस प्रकार एक भारी नेटवर्क ट्रैफ़िक। Express.js और नई Koajs (जो कॉलबैक नरक को हटा दिया गया है) जैसी रूपरेखाओं ने नोड पर काम करना और भी आसान बना दिया है।


15

एस्बेस्टस लोंगजोन दान करना ...

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

मैं Node.js. के साथ अपने अनुभव का एक बहुत ही शानदार दृश्य दे सकता था इसके बजाय मैं अच्छे अंकों और खराब अंकों के बारे में ईमानदार था, जिनका मैंने सामना किया।

मुझे कुछ उद्धरण शामिल हैं जो यहां प्रासंगिक हैं:

चेतावनी: Node.js और इसका पारिस्थितिकी तंत्र आपको बुरी तरह से जलाने के लिए पर्याप्त गर्म है !

जब मैं गणित में एक शिक्षक के सहायक था, तो मुझे जो गैर-स्पष्ट सुझाव दिए गए थे, उनमें से एक छात्र को यह बताने के लिए नहीं था कि कुछ आसान था। " रेट्रोस्पेक्ट में कारण कुछ हद तक स्पष्ट था: यदि आप लोगों को बताते हैं कि कुछ आसान है, तो कोई ऐसा व्यक्ति जो कोई समाधान नहीं देखता है, वह (और भी) बेवकूफ महसूस कर सकता है, क्योंकि न केवल वे समस्या को हल करने के लिए प्राप्त नहीं करते हैं, बल्कि समस्या वे समझने में बहुत मूर्ख हैं कि एक आसान है!

ऐसे गोचा हैं जो केवल पायथन / Django से आने वाले लोगों को नाराज नहीं करते हैं, जो यदि आप कुछ भी बदलते हैं तो तुरंत स्रोत को फिर से लोड करते हैं। Node.js के साथ, डिफ़ॉल्ट व्यवहार यह है कि यदि आप एक परिवर्तन करते हैं, तो पुराना संस्करण सक्रिय रहता है जब तक कि समय समाप्त होने तक या जब तक आप मैन्युअल रूप से बंद न करें और सर्वर को पुनरारंभ करें। यह अनुचित व्यवहार सिर्फ पायथनस्टस को नाराज नहीं करता है; यह उन देशी Node.js उपयोगकर्ताओं को भी परेशान करता है जो विभिन्न वर्कअराउंड प्रदान करते हैं। StackOverflow सवाल "Node.js में फ़ाइलों का ऑटो-रीलोड" है, इस लेखन के समय, 200 से अधिक upvotes और 19 उत्तर; एक उपयोगकर्ता http://tinyurl.com/reactjs-node-supervisor पर होमपेज के साथ एक नानी स्क्रिप्ट, नोड-पर्यवेक्षक के लिए उपयोगकर्ता को निर्देशित करता है। यह समस्या नए उपयोगकर्ताओं को बेवकूफ महसूस करने के लिए बड़े अवसर के साथ देती है क्योंकि उन्हें लगा कि उन्होंने समस्या को ठीक कर लिया है, लेकिन पुराने, छोटी गाड़ी का व्यवहार पूरी तरह से बदल गया है। और सर्वर को उछालना भूल जाना आसान है; मैंने कई बार ऐसा किया है। और मैं जो संदेश देना चाहूंगा, वह है, '' नहीं, तुम मूर्ख नहीं हो क्योंकि नाद का यह व्यवहार तुम्हारी पीठ थपथपाता है; यह सिर्फ इतना है कि Node.js के डिजाइनरों ने यहां उचित व्यवहार प्रदान करने का कोई कारण नहीं देखा। इसके साथ सामना करने की कोशिश करो, शायद नोड-पर्यवेक्षक या किसी अन्य समाधान से थोड़ी मदद लें, लेकिन कृपया यह महसूस न करें कि आप बेवकूफ हैं। आप समस्या के साथ एक नहीं हो; समस्या Node.js के डिफ़ॉल्ट व्यवहार में है। "

यह खंड, कुछ बहस के बाद, वास्तव में छोड़ दिया गया था, क्योंकि मैं "यह आसान है" का आभास नहीं देना चाहता। मैं काम करने के लिए चीजों को प्राप्त करते समय अपने हाथों को बार-बार काटता हूं, और मैं मुश्किलों को आसान नहीं करना चाहता हूं और आपको विश्वास दिलाता हूं कि Node.js और इसके पारिस्थितिकी तंत्र को अच्छी तरह से काम करने के लिए प्राप्त करना एक सीधा मामला है और अगर यह आपके लिए भी सीधा नहीं है। , आप नहीं जानते कि आप क्या कर रहे हैं। यदि आप Node.js का उपयोग करके अप्रिय कठिनाइयों में नहीं चलते हैं, तो यह अद्भुत है। यदि आप ऐसा करते हैं, तो मुझे उम्मीद है कि आप यह महसूस नहीं करेंगे कि "मैं बेवकूफ हूं-मेरे साथ कुछ गलत होना चाहिए।" यदि आप Node.js. के साथ बुरा आश्चर्य अनुभव करते हैं तो आप बेवकूफ नहीं हैं वो आप नहीं हैं! यह Node.js और इसका पारिस्थितिकी तंत्र है!

परिशिष्ट, जो मैं वास्तव में पिछले अध्यायों और बढ़ते निष्कर्षों के बाद नहीं चाहता था, इस बारे में बात करता है कि मैं पारिस्थितिकी तंत्र में क्या खोजने में सक्षम था, और नैतिक साहित्यिकता के लिए एक समाधान प्रदान किया:

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

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

हालाँकि, यह धीरे से बताया जा सकता है कि जब आप अपने सर्वर के लिए एक लेखन कोड होते हैं, तो आपको अपने डेटाबेस को एक सहनीय 5MB से अधिक आकार में बनाने से किसी अतिरिक्त सुरक्षा की आवश्यकता नहीं होती है। अधिकांश डेवलपर्स को नानी के रूप में काम करने वाले उपकरणों की न तो आवश्यकता होगी और न ही उन्हें 5MB से अधिक सर्वर-साइड डेटा को स्टोर करने से बचाने की। और 5MB कोटा जो क्लाइंट-साइड पर गोल्डन बैलेंसिंग एक्ट है, बल्कि Node.js सर्वर पर थोड़ा सा मूर्खतापूर्ण है। (और, कई उपयोगकर्ताओं के लिए एक डेटाबेस के लिए जैसे कि इस परिशिष्ट में शामिल किया गया है, यह थोड़ा दर्दनाक रूप से इंगित किया जा सकता है, कि प्रति उपयोगकर्ता खाते में 5 एमबी नहीं है जब तक कि आप प्रत्येक उपयोगकर्ता खाते के लिए डिस्क पर एक अलग डेटाबेस नहीं बनाते हैं; सभी उपयोगकर्ता एक साथ खाते हैं। यह दर्दनाक हो सकता हैयदि आप वायरल जाते हैं!) प्रलेखन में कहा गया है कि कोटा अनुकूलन योग्य है, लेकिन डेवलपर को एक सप्ताह पहले एक ईमेल पूछ रहा है कि कोटा को कैसे बदलना है, अनुत्तरित है, जैसा कि स्टैकऑवरफ्लो प्रश्न एक ही पूछ रहा था। एकमात्र उत्तर जो मुझे मिल पाया है, वह जीथब कॉफ़ीस्क्रिप्ट स्रोत में है, जहाँ यह एक निर्माणकर्ता के लिए वैकल्पिक दूसरे पूर्णांक तर्क के रूप में सूचीबद्ध है। तो यह काफी आसान है, और आप एक डिस्क या विभाजन आकार के बराबर कोटा निर्दिष्ट कर सकते हैं। लेकिन एक ऐसी सुविधा को पोर्ट करने के अलावा, जिसका अर्थ यह नहीं है कि टूल का लेखक किसी वैरिएबल या फ़ंक्शन के लिए 0 के रूप में अर्थ "असीमित" की व्याख्या करने के लिए एक मानक मानक का पालन करने में पूरी तरह से विफल हो गया है जहां एक पूर्णांक कुछ संसाधन उपयोग के लिए अधिकतम सीमा निर्दिष्ट करना है। इस मिसफिट के साथ सबसे अच्छी बात शायद यह बताना है कि कोटा इन्फिनिटी है:

if (typeof localStorage === 'undefined' || localStorage === null)
  {      
  var LocalStorage = require('node-localstorage').LocalStorage;
  localStorage = new LocalStorage(__dirname + '/localStorage',
    Infinity);
  }

क्रम में दो टिप्पणियों की अदला-बदली:

लोगों ने अनावश्यक रूप से पूरी तरह से जावास्क्रिप्ट का उपयोग करते हुए खुद को लगातार पैर में गोली मार ली, और जावास्क्रिप्ट का एक हिस्सा सम्मानजनक भाषा बनाया जा रहा था सार में एक डगलस क्रॉकफोर्ड कह रहा था, “भाषा के रूप में जावास्क्रिप्ट में कुछ बहुत अच्छे हिस्से हैं और कुछ वास्तव में खराब हिस्से हैं। यहाँ अच्छे हिस्से हैं। बस भूल जाओ कि कुछ और भी है। ” शायद हॉट Node.js का इकोसिस्टम अपना "डगलस क्रॉकफ़ोर्ड" उगाएगा, जो कहेगा, "Node.js का इकोसिस्टम एक कोडिंग वाइल्ड वेस्ट है, लेकिन इसमें कुछ असली रत्न पाए जाते हैं। यहाँ एक रोडमैप है। यहां लगभग किसी भी कीमत पर बचने के लिए क्षेत्र हैं। यहां किसी भी भाषा या परिवेश में पाए जाने वाले सबसे अमीर paydirt वाले क्षेत्र हैं। ”

शायद कोई और उन शब्दों को एक चुनौती के रूप में ले सकता है, और क्रॉकफोर्ड के नेतृत्व का पालन कर सकता है और "अच्छे भागों" और / या "बेहतर भागों" को Node.js और उसके पारिस्थितिकी तंत्र के लिए लिख सकता है। मैं एक प्रति खरीदूंगा!

और सभी परियोजनाओं पर उत्साह और सरासर काम के घंटे की डिग्री को देखते हुए, इस लेखन के समय में किए गए अपरिपक्व पारिस्थितिकी तंत्र के बारे में किसी भी टिप्पणी को तेज करने के लिए एक या दो या तीन साल में वारंट किया जा सकता है। यह कहने में वास्तव में पाँच साल लग सकते हैं, '' 2015 के Node.js के पारिस्थितिकी तंत्र में कई खान-पान थे। 2020 Node.js पारिस्थितिकी तंत्र में कई विरोधाभास हैं। "


9

यदि आपका एप्लिकेशन मुख्य रूप से वेब एपिस, या अन्य io चैनलों को बनाता है, तो यूजर इंटरफेस दें या लें, नोड.जेएस आपके लिए एक उचित पिक हो सकता है, खासकर यदि आप सबसे अधिक स्केलेबिलिटी को निचोड़ना चाहते हैं, या, यदि जीवन में आपकी मुख्य भाषा। जावास्क्रिप्ट (या प्रकार के जावास्क्रिप्ट ट्रांसपिलर) है। यदि आप माइक्रोसर्विसेस बनाते हैं, तो नोड.जेएस भी ठीक है। Node.js किसी भी प्रोजेक्ट के लिए भी उपयुक्त है जो छोटा या सरल हो।

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

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

विशेष रूप से, जब आपके आवेदन को समकालिक प्रवाह करने की आवश्यकता होती है, तो आप आधे-पके हुए समाधानों से अधिक खून बहना शुरू कर देते हैं जो आपकी विकास प्रक्रिया के संदर्भ में आपको काफी धीमा कर देते हैं। यदि आप अपने आवेदन में गहन भागों की गणना करते हैं, तो सावधानी से पिकिंग (केवल) नोड के साथ चलें। शायद http://koajs.com/ या अन्य सस्ता माल उन मूल रूप से कांटेदार पहलुओं को कम करता है, जब मैंने मूल रूप से नोड का उपयोग किया था।


3
Node.js अनुप्रयोगों को स्केल करने के लिए कई मौजूदा दृष्टिकोण हैं, और आप "आधे-बेक्ड समाधान", "भयानक हैक" और "भयानक एपीआई" दावों के बारे में कोई संदर्भ प्रदान नहीं करते हैं। उन पर मन का विस्तार?
स्वेन स्लोटवेग

मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ता हूं, लेकिन यह प्रवाह नियंत्रण के लिए तथाकथित समाधानों को देखने के लिए पर्याप्त है।
Matanster

2
यह वास्तव में एक जवाब नहीं है। आप दावा करते हैं कि मौजूदा समाधान "भयानक हैक" हैं, फिर भी उनमें से किसी को इंगित करने में विफल हैं। क्या आपने माना है कि आप Node.js एप्लिकेशन को स्केल करने के सही तरीकों के बारे में आसानी से नहीं समझ सकते हैं या जागरूक नहीं हैं?
स्वेन स्लोटवेग

मैंने अपने उत्तर को थोड़ा अद्यतन किया। हो सकता है कि आपके पास अभी भी शिकायतें हैं, लेकिन अगर आपको लगता है कि यह गलत है तो आपको विवरण के साथ टिप्पणी करनी चाहिए ... बल्कि उत्तर में एक कमी की ओर इशारा करना चाहिए। कि समुदाय imo के लिए अधिक उत्पादक होगा।
13

-2

मैं कुछ बिंदुओं को साझा कर सकता हूं कि नोड नोड का उपयोग कहां और क्यों करना है।

  1. चैट जैसे रियलटाइम एप्लिकेशन के लिए, सहयोगी संपादन बेहतर है हम नोडज के साथ जाते हैं क्योंकि यह घटना का आधार है जहां आग घटना और सर्वर से ग्राहकों को डेटा।
  2. सरल और समझने में आसान है क्योंकि यह जावास्क्रिप्ट बेस है जहां अधिकांश लोगों को विचार है।
  3. वर्तमान वेब अनुप्रयोगों में से अधिकांश कोणीय js और रीढ़ की हड्डी की ओर जा रहे हैं, नोड के साथ क्लाइंट साइड कोड के साथ बातचीत करना आसान है क्योंकि दोनों ही json डेटा का उपयोग करेंगे।
  4. उपलब्ध प्लगइन्स की बहुत।

कमियां: -

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

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


-3
  1. नोड त्वरित प्रोटोटाइप के लिए बहुत अच्छा है, लेकिन मैं इसे फिर से किसी भी जटिल के लिए उपयोग नहीं करूंगा। मैंने एक संकलक के साथ संबंध विकसित करने में 20 साल बिताए और मुझे यकीन है कि यह याद आती है।

  2. नोड कोड बनाए रखने के लिए विशेष रूप से दर्दनाक है जिसे आपने थोड़ी देर के लिए नहीं देखा है। प्रकार जानकारी और संकलन समय त्रुटि का पता लगाने के लिए अच्छा है। क्यों सब बाहर फेंक? किस लिए? और खतरा, जब कुछ दक्षिण में जाता है तो स्टैक के निशान काफी बार पूरी तरह से बेकार हो जाते हैं।


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

2
मैंने संकलित भाषाओं के साथ 30 साल बिताए हैं, लेकिन केवल एक साल के लिए इसका उपयोग करने के बाद जावास्क्रिप्ट अब मेरी पसंद की भाषा है। यह सिर्फ इतना उत्पादक है - मैं जावा सी # सी ++ या सी की तुलना में बहुत कम कोड के साथ बहुत कुछ कर सकता हूं, लेकिन यह एक अलग मानसिकता है। अन-टाइप किए गए चर वास्तव में कई मामलों में एक फायदा है। JSLINT जरूरी है। जब आपको चीजों को समवर्ती रूप से अतुल्यकालिक कॉलबैक करने की आवश्यकता होती है तो किसी भी भाषा की तुलना में अधिक सुरक्षित, आसान और अंततः अधिक उत्पादक होती है जहां आपको थ्रेड का उपयोग करना पड़ता है। और आपको वैसे भी जावास्क्रिप्ट को जानना होगा क्योंकि ब्राउज़र की भाषा।
जेम्स

मैं उठाए गए चिंताओं के प्रति सहानुभूति रखता हूं, और मैं ध्यान देता हूं कि उन्हें संबोधित करने के लिए कुछ प्रयास किए गए हैं, हालांकि वे निश्चित रूप से सार्वभौमिक रूप से लागू नहीं होते हैं। टर्न नामक एक अद्भुत परियोजना है जो जावास्क्रिप्ट कोड और पुस्तकालयों के स्थैतिक विश्लेषण से प्रकार व्युत्पत्ति प्रदान कर सकती है। इसमें विभिन्न संपादकों के लिए प्लगइन्स हैं। टाइपस्क्रिप्ट, JSDoc और बेटरज भी है । और फिर गो , कई संकलित-से-जावास्क्रिप्ट भाषाओं में से एक है !
joeytwiddle
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.