मैं Node.js.s के एक नए स्थिर संस्करण की रिलीज़ की घोषणा करते हुए बेहद खुश हूँ
एनओडी
0.6 रिलीज की तुलना में, नई रिलीज कई प्रमुख प्रदर्शन संकेतकों में एक महत्वपूर्ण सुधार प्रदान करेगी, साथ ही अंतर्निहित एपीआई और नए डिबगिंग टूल को भी साफ करेगी।
संक्षिप्त
संस्करण के आगमन के साथ 0.8.0:
- नोड बहुत तेज हो गया है।
- नोड अधिक स्थिर हो गया है।
- फिर, आप फ़ाइल डिस्क्रिप्टर के साथ काम कर सकते हैं।
- क्लस्टर मॉड्यूल बहुत अधिक अद्भुत हो गया है।
- डोमेन मॉड्यूल जोड़ा गया है।
- उत्तर मॉड्यूल बेहतर हो गया।
- वफ़ बिल्ड सिस्टम को जिप द्वारा बदल दिया गया है।
- कुछ अन्य बदलाव भी हुए हैं।
- ब्लॉग पोस्ट के निचले भाग में नोड इंस्टॉलेशन फ़ाइलों के लिंक हैं।
गति
इस संस्करण में, V8 और libuv में कुछ महत्वपूर्ण बदलाव किए गए, जिससे एक महत्वपूर्ण प्रदर्शन में सुधार हुआ।
निम्नलिखित सभी माप ओएस एक्स के साथ मेरे लैपटॉप पर किए गए थे, लेकिन परिणाम स्मार्टओएस, लिनक्स और विंडोज के साथ टिप्पणियों के विशिष्ट हैं।
# io.js # 0.6.19, 1024 : 19,428793471925395 / 4096 : 59,737156511350065 / 16384 : 83,97010664203543 / 65536 : 97,4184120798831 / # 0.8.0, 1024 : 61,236987140232706 / 4096 : 109,05125408942203 / 16384 : 182,18254691200585 / 65536 : 181,91740949608877 / # v0.6.19, 1024 : 29,96883241428914 / 4096 : 62,34413965087282 / 16384 : 165,7550140891762 / 65536 : 266,73779674579885 / # v0.8.0, 1024 : 57,63688760806916 / 4096 : 136,7801942278758 / 16384 : 244,8579823702253 / 65536 : 302,2974607013301 /
अंतर काफी है। यदि आप नोड का उपयोग करके नेटवर्क प्रोग्राम लिखते हैं और महत्वपूर्ण ट्रैफ़िक चलाते हैं, तो आप इस सुधार को नोटिस करेंगे।
फ़ाइल पढ़ने की गति भी काफी तेज हो गई है:
# v0.6.19 110948 ( — ) 90141,32 1 ( — ) 11093,69 ( — ) # v0.8.0 158193 ( — ) 63217,16 1 ( — ) 15818,48 ( — )
और, ज़ाहिर है, "हैलो, दुनिया" के सर्वव्यापी परीक्षण
के परिणाम
HTTP सर्वर विशेष रूप से एक बड़े संदेश आकार के साथ विशेष रूप से उच्च गति दिखाते हैं:
$ TYPE=bytes LENGTH=123 bash benchmark/http.sh 2>&1 | grep # 0.6.19 : 3317,24 ( ) # 0.8.0 : 3795,34 ( ) $ TYPE=bytes LENGTH=1024 bash benchmark/http.sh 2>&1 | grep # v0.6.19 : 3258,42 ( ) # 0.8.0 : 3585,62 ( ) $ TYPE=bytes LENGTH=123456 bash benchmark/http.sh 2>&1 | grep # v0.6.19 : 218,51 ( ) # 0.8.0 : 749,17 ( )
यूनिकोड में प्रतिक्रिया के मामले में अंतर और भी अधिक ध्यान देने योग्य है:
$ TYPE=unicode LENGTH=1024 bash benchmark/http.sh 2>&1 | grep # v0.6.19 : 3228,23 ( ) # v0.8.0 : 3317,60 ( ) $ TYPE=unicode LENGTH=12345 bash benchmark/http.sh 2>&1 | grep # v0.6.19 : 1703,96 ( ) # v0.8.0 : 2431,61 ( ) $ TYPE=unicode LENGTH=55555 bash benchmark/http.sh 2>&1 | grep #v0.6.19 : 161,65 ( ) #v0.8.0 : 980,38 ( ) $ TYPE=unicode LENGTH=99999 bash benchmark/http.sh 2>&1 | grep # v0.6.19 ^C # # v0.8.0 : 252,69 ( )
जितना अधिक बाइट्स आप ट्रांसफर करते हैं, आप जितना अधिक काम करेंगे, आपके लिए उतना ही ध्यान देने योग्य होगा,
नोड संस्करण 0.8 की श्रेष्ठता
0.6 से अधिक होगी।अधिकांश भाग के लिए, प्रदर्शन लाभ V8 में सुधार से आते हैं। V8 डेवलपर्स
Node.js परियोजना की जरूरतों
के लिए बहुत ही उत्तरदायी थे
। अधिकांश भाग के लिए, नोड की सफलता ऐसे उत्कृष्ट वीएम के शीर्ष पर नोड का निर्माण करने में सक्षम होने से उपजी है।
सिस्टम बनाएं
शुरुआत से ही, नोड ने WAF बिल्ड सिस्टम का उपयोग किया, जो कि पायथन और SCons के समान है। Chrome प्रोजेक्ट हाल ही में SCons से GYP मेटा-असेंबली सिस्टम में माइग्रेट हुआ है। यह उस सिस्टम के आधार पर मेक-अप फ़ाइलें, या Visual Studio प्रोजेक्ट फ़ाइलें, या Xcode फ़ाइलें बनाता है, जिसके लिए इसे बनाया जा रहा है। Chrome प्रोजेक्ट के भाग के रूप में, V8 को अब GYP के माध्यम से बनाया जा रहा है। GYP के उपयोग से, नोड को अवसर मिलता है
- प्रत्येक मंच पर इष्टतम निर्माण प्रणाली के साथ एकीकरण,
- संपूर्ण नोड की विधानसभा में V8 विधानसभा प्रक्रिया के एकीकरण में आसानी,
- संकलन का घोषणात्मक विवरण, जो प्रबंधनीयता में सुधार करता है।
नोड v0.6 पहले से ही विंडोज के तहत निर्माण करने के लिए GYP का उपयोग करता था, लेकिन अब GYP सभी प्लेटफार्मों के लिए एक विधानसभा को परिभाषित करता है। नोड के बाहरी ऐड
-ऑन ने अभी GYP के लिए संक्रमण शुरू किया है, और
नोड-जिप मॉड्यूल को npm के साथ बंडल किया गया है। भविष्य के रिलीज में,
नोड-वफ़ को आधिकारिक तौर पर
गैर- अनुशंसित घोषित किया जाएगा। यदि आपका मॉड्यूल अभी wscript का उपयोग कर रहा है, तो कृपया जल्द से जल्द जिप पर स्विच करें।
स्थिरता वृद्धि
संस्करण 0.6 में लिब्यू और लिबायो से लेबुव
में संक्रमण कुछ हद तक नोड के आंतरिक भागों के लिए अस्थिर था। इस बलिदान को करने का एक कारण था: लिबव एक क्रॉस-प्लेटफॉर्म अतुल्यकालिक
I / O लाइब्रेरी का स्पष्ट विकल्प है
, और Node.js का प्रदर्शन विंडोज और यूनिक्स दोनों पर प्रभावशाली है। हालांकि,
संस्करण 0.4 से 0.6 तक का संक्रमण कई उपयोगकर्ताओं के लिए सुचारू रूप से दूर हो गया: लिबुव लाइब्रेरी उम्र में नोड से नीच थी, जिसने शुरुआती रिलीज को प्रभावित किया।
लेकिन वर्तमान में, बहुत कम अपवादों के साथ, यदि
v0.6 के लिए आपका कार्यक्रम
v0.8 पर नहीं जाता
है, तो इसमें सभी आवश्यक परिवर्तन स्पष्ट तरीके से करना आसान है। लिबव में काफी वृद्धि हुई है, और परिणामस्वरूप,
नोड 0.8 सरलता और दक्षता में जीतता है।
व्यक्तिगत API में परिवर्तन के विवरण के
लिए एक नए संस्करण में अपग्रेड करने पर विकि लेख देखें।
रिटर्न फाइल डिस्क्रिप्टर
संस्करण नोड 0.4 में, एक
सुनने की विधि थी जिसके द्वारा सर्वर एक विशिष्ट फ़ाइल विवरणक के लिए "सुन" सकते थे, जो पहले से ही एक निश्चित सॉकेट या पोर्ट से बंधा हुआ था।
संस्करण 0.6 में, इस कार्यक्षमता को हटा दिया गया था - मुख्यतः क्योंकि यह यूनिक्स से बहुत अधिक बंधा हुआ था, इसलिए इसे आसानी से नए क्रॉस-प्लेटफॉर्म फ्रेमवर्क लिबव में पोर्ट नहीं किया जा सकता था।
लेकिन चूंकि
वे अक्सर एक विधि के रूप में
ListenFD का उपयोग करते थे, जो कई नोड प्रक्रियाओं से सर्वर को एक ही अंतर्निहित संसाधन तक पहुंचने की अनुमति देता था, इस उद्देश्य के लिए
क्लस्टर मॉड्यूल को जोड़ा गया था। फिर भी,
ListenFD का उपयोग करने के लिए कई अन्य चालें कुछ नहीं के साथ छोड़
दी गईं , और यही कारण है कि कुछ प्रोग्रामर
नोड 0.6 का उपयोग करने में असमर्थ थे।
संस्करण 0.8 में, नया
सर्वर.लिस्टन ({fd: number}) पैरामीटर समान कार्यक्षमता प्रदान करेगा
।नोड 0.4 से एक और संभावना
, जो 0.6 में नहीं गिरती थी
, वह मनमाने ढंग से फाइल डिस्क्रिप्टर पास करने की क्षमता थी
, जो कि
कस्टमफीड्स सरणी का उपयोग करके एक बच्चे की प्रक्रिया में stdio के रूप में
थी । नोड संस्करण 0.6 में, CustomFds का उपयोग मूल प्रक्रिया की stdio को वारिस करने के लिए किया जा सकता है, लेकिन मनमाने ढंग से हैंडल या फ़ाइल डिस्क्रिप्टर को चाइल्ड stdio पास करने के लिए नहीं। इसके अलावा, मानक ट्रिनिटी से
अधिक , बाहर, गलत तरीके से
कुछ स्थानांतरित करने का एक तरीका नहीं था
, इसलिए
कुछ विशेष खुली चौथी फ़ाइल विवरणक के लिए इंतजार कर रहे प्रोग्राम विफल रहे।
संस्करण 0.8 में, हमने
stdio array को
child_process.spawn के मापदंडों में
जोड़ा है
। जितने चाहें उतने फाइल डिस्क्रिप्टर पास कर लें, और जैसे-तैसे संभालते हैं - बच्चे की प्रक्रिया उन्हें फाइल डिस्क्रिप्टर के रूप में देखेंगे, हालांकि वे पहले से ही खुले हैं।
अधिक शक्तिशाली क्लस्टर
0.8 में क्लस्टर मॉड्यूल
0.6 से इतना बेहतर है कि आप इसे केवल नया लिखा कह सकते हैं। इसका एपीआई मूल रूप से पिछड़ेपन को बनाए रखता है, लेकिन पूरी तरह से नहीं। (
नए संस्करण में अपग्रेड के बारे में विकि लेख पर विवरण पढ़ें।)
इन (बहुत छोटे) एपीआई परिवर्तनों के अपवाद के साथ, यदि आपने
0.6 में एक क्लस्टर का उपयोग किया
है , तो आपका कार्यक्रम
0.8 में काम करना शुरू कर देगा
, लेकिन एक ही समय में तेजी से कार्य करेगा और बेहतर व्यवहार करेगा। और यदि आप
0.8 क्लस्टर की नई विशेषताओं के गुणों पर ध्यान नहीं देते हैं
, तो यह व्यर्थ है।
उनमें से बहुत से ऐसे हैं जो आप उन्हें स्पष्ट रूप से नहीं बता सकते हैं।
एपीआई प्रलेखन पढ़ें।
डोमेन
"डोमेन" का मूल विचार कई अलग-अलग
I / O ऑपरेशन को संयोजित करना था ताकि त्रुटि के मामले में
कुछ संदर्भ हो।
चूंकि रयान ने पिछले साल NodeConf समर कैंप में नोड उपयोगकर्ताओं के साथ इस सुविधा पर चर्चा की थी, इसलिए वे कई बार "डोमेन" के कार्यान्वयन पर लौट आए। हल की जा रही समस्या
कम या ज्यादा समझ में आने वाली है, हालाँकि, इसे हल करने के अधिकांश प्रयासों ने या तो उत्पादकता में गंभीर गिरावट ला दी, या विशेष मामलों में
कोई कठिनाई दिखाई दी।
इसलिए हम इस विचार के कार्यान्वयन के बहुत सीमित संस्करण के साथ 0.8 पर आए। डिफ़ॉल्ट रूप से, इसे बंद कर दिया जाता है, आप इसका उपयोग तब कर सकते हैं, जब इसका उपयोग प्रदर्शन पर बहुत कम प्रभाव डालता है (और जब इसका उपयोग नहीं किया जाता है तो यह इसे बिल्कुल प्रभावित नहीं करता है)।
एपीआई प्रलेखन में कई उदाहरण हैं, इसलिए उन्हें पढ़ें और आप बग्स और क्रैश को बेहतर तरीके से पकड़ना शुरू कर सकते हैं।
डोमेन मॉड्यूल अभी भी प्रयोगात्मक माना जाता है। हम आपकी प्रतिक्रिया की प्रतीक्षा कर रहे हैं, इसलिए कृपया इसका उपयोग करें और हमें बताएं कि आप इसके बारे में क्या सोचते हैं।
रेप्लस, रीडलाइन, टीटीवाई
उत्तर, रीडलाइन और TTY मॉड्यूल को काफी कड़ा किया गया था। इन तीन मॉड्यूल्स के बीच के इंटरफेस को साफ किया गया और रिफलेक्ट किया गया, बहुत सारे सामान्य कॉमन पॉइंट्स को हटा दिया गया और आपके प्रोग्राम्स को डीबग करते समय इन मॉड्यूल्स के उपयोग को सरल बनाया गया।
ये सभी बारीकियाँ कभी-कभी ऐसी trifles लगती हैं, लेकिन उत्तर में ये trifles जीवन को बेहतर बनाते हैं। व्यक्तिगत रूप से, मुझे निम्नलिखित पसंद आया:
- यदि आप fs या net या path टाइप करते हैं, तो उसी नाम का मॉड्यूल अपने आप लोड हो जाएगा।
- यदि आप npm इंस्टॉल टाइप करते हैं ... , तो एक उपयोगी संकेत प्रदर्शित किया जाएगा।
- मामले में कोई और अधिक बकवास नहीं होगी जब स्क्रीन की सीमा के साथ एक लंबी रेखा लपेटी जाती है, और इसमें आप बैकस्पेस भी दबा सकते हैं। सब कुछ सही ढंग से संसाधित किया जाएगा।
भविष्य में देखो
पिछले समान संस्करणों के साथ,
संस्करण 0.8 परिवार जीवन भर एपीआई और एबीआई की स्थिरता बनाए रखेगा।
संस्करण ०.२ में, नई रिलीज़ महत्वपूर्ण त्रुटियों या सुरक्षा खामियों के रूप में 2012 के अंत तक तय हो जाएंगी। हालांकि,
संस्करण 0.6 विकास टीम का फोकस नहीं होगा।
रिलीज 0.9 अगले कुछ हफ्तों में शुरू होगी।
V0.9 विकसित करने में ध्यान केंद्रित यह है:
- HTTP कार्यान्वयन। Http मॉड्यूल पहले से ही वास्तविक दुनिया में भारी रूप से उपयोग किया जाता है, लेकिन इसे वास्तव में स्ट्रिपिंग और रिफैक्टिंग की आवश्यकता होती है। विशेष रूप से कई मामलों में काम की शुद्धता में सुधार करने के लिए, उत्पादकता वृद्धि के लिए इंटरफेस के समन्वय पर विशेष ध्यान दिया जाएगा।
- थ्रेड एपीआई। स्ट्रीमिंग एक्सेस एपीआई के पीछे का विचार नोड के मूल में है। हालांकि, HTTP के मामले में, इसकी क्षमताओं का विकास क्रमिक और अनाड़ी था, इसलिए अब मॉड्यूल को साफ करना होगा। अब उसके साथ सही तरीके से काम करना मुश्किल है, खासकर जब त्रुटि से निपटने की बात आती है।
- धाराएँ कामवासना। लिबवू में हैंडल इंटरफेस बाकी कोड के साथ और प्लेटफॉर्म के बीच स्थिरता के लिए फिर से बनाया जाएगा।
इसके अलावा, कुछ क्षेत्रों में Node.js में सुधार किया जा सकता है ताकि इंजन आंतरिक आत्म-संगतता पाता है, एक उच्चारण के बिना जावास्क्रिप्ट बोलता है, और प्रदर्शन में सुधार करता है। इनमें से कोई भी योजना अभी तक लागू नहीं की गई है, लेकिन यहां हमारी योजना क्षितिज पर कुछ विचारों की एक सूची है:
- हमें बफ़र्स से टाइप किए गए सरणियों में जाना चाहिए। बफ़र काम करना जारी रखेंगे, लेकिन चूंकि टाइप किए गए सरणियों जावास्क्रिप्ट के मूल निवासी हैं, इसलिए उनकी दिशा में आगे बढ़ना और उन्हें पसंदीदा एपीआई घोषित करना तर्कसंगत है।
- वर्तमान में, SSL प्रदर्शन खराब है। नोड से ओपनएसएसएल तक का इंटरफ़ेस कुछ हद तक कलाहीन हो गया है, इसमें सुधार के कई अवसर हैं।
- VM मॉड्यूल को महत्वपूर्ण सुधार की आवश्यकता है। इसमें ब्राउज़र जावास्क्रिप्ट संदर्भ का अनुकरण करने का साधन नहीं है, और यह अपर्याप्त है।
- क्रिप्टो मॉड्यूल अभी भी कई बहुत पुराने एपीआई का उपयोग करता है। संस्करण 0.8 में, यह कई स्थानों (आखिरकार!) में बफ़र प्राप्त करता है , लेकिन फिर भी नोड के अन्य भागों में स्ट्रीमिंग इंटरफ़ेस प्रदान नहीं करता है।
इस बिंदु पर, नोड सुविधा सेट बहुत अधिक पूर्ण है। जब अंदर स्ट्रिपिंग होती है
, तो कुछ बदल
सकता है, लेकिन, जैसा कि आप आसानी से देख सकते हैं, हम किसी भी महत्वपूर्ण नई सुविधाओं को पेश करने की योजना नहीं बनाते हैं। हमारे काम का दायरा रेखांकित किया गया है, और मुख्य कार्यों की स्थिरता और उत्पादकता में सुधार पर ध्यान केंद्रित करना जारी रखने का समय है, जिससे
आपके कार्यक्रमों की नवीनता का समर्थन किया जा सके।
और अंत में, उन पाठकों के लिए, जो
संस्करण 0.7.12 के बाद जोड़े गए
थे, इस रिलीज़ में बदलाव
की सामान्य सूची:
25 जून 2012, संस्करण 0.8.0 (स्थिर)
- V8: संस्करण 3.11.10.10 में अपग्रेड
- npm: 1.1.32 पर अपग्रेड
- iowatcher की सिफारिश की गैर-बेन (बेन नूर्डहिस)
- विंडोज़: अपडेटेड प्रोग्राम आइकन (बर्ट बेल्डर)
- http: "जरूरी नहीं है कि एक शरीर" चेतावनी डीबग () (isaacs) के लिए भेजा
- Blog.nodejs.org की सामग्री रिपॉजिटरी (isaacs) में रखी गई है
- स्टड में # 3503 को ठीक करें: पाइप (भाग्य) में फिर से शुरू ()
- क्रिप्टो: SetKey () (Fedor Indutny) में निश्चित त्रुटि संदेश
- जोड़ा गया कमांड लाइन के झंडे
- fs: फिक्स्ड fs.watchFile () विधि (बेन नूर्डहिस)
- fs: पाइप प्रसंस्करण के मामले में फिक्स्ड fs.readfile () विधि (isaacs)
- बाकी कोड (रायन डाहल) से मिलान करने के लिए नाम दिया गया GYP चर नोड_use_system_openssl