जावास्क्रिप्ट डेवलपर्स चमकदार जंग लगे उपकरणों का उपयोग कर रहे हैं। यहाँ पर क्यों।
Next.js 12 के बेंचमार्क परिणाम कायल हैं। लेकिन क्या यह स्विच के लायक है?
हमारे हालिया टीम निर्माण कार्यक्रम में, मैंने इस पर बात की कि जावास्क्रिप्ट डेवलपर्स अपने टूल को रस्ट में क्यों ले जा रहे हैं। यह एक बहुत अच्छी प्रतिक्रिया थी और हमने फैसला किया कि इसे दुनिया के साथ साझा करना अच्छा होगा। तो यह रहा। यह बातचीत का संपादित संस्करण है, जिसे पढ़ने के लिए लिखा गया है और हमारे पॉडकास्ट चैनल पर एक स्क्रीनकास्ट होगा। तो चलिए सीधे इसमें गोता लगाते हैं।
पृष्ठभूमि
सॉफ़्टवेयर में एक सामान्य प्रवृत्ति उन उपकरणों को लिखना है, जिनका उपयोग हम डेवलपर अपने एप्लिकेशन बनाने के लिए उसी भाषा में करते हैं, जिसका उपयोग हम एप्लिकेशन बनाने के लिए करते हैं। उदाहरण के लिए, पाइप को पायथन में लिखा जाता है, संगीतकार को PHP में लिखा जाता है, जावा में मावेन आदि। यह समझ में आता है क्योंकि ज्यादातर बार उपकरण बनाने वाले लोग भी उनका उपयोग करने वाले होते हैं। इसलिए उनकी पसंद की भाषा में काम करना आसान है।
जावास्क्रिप्ट कोई अपवाद नहीं है। गल्प और बोवर से बेबेल और वेबपैक तक हमने यह सब जावास्क्रिप्ट में लिखा है। इसने हमारे लिए अच्छा काम किया लेकिन कुछ समस्याएं थीं।
जावास्क्रिप्ट के साथ समस्या
समस्या को देखने के लिए हमें जावास्क्रिप्ट के गुणों को देखना होगा। जावास्क्रिप्ट वेब पेजों के लिए एक हल्की, स्क्रिप्टिंग भाषा है। निश्चित रूप से अब हम इसे हर जगह उपयोग करते हैं, बैकएंड से लेकर डेटाबेस तक, लेकिन यह मूल रूप से पृष्ठों को पहले चमकदार बनाने के लिए बनाया गया था और बाकी सब बाद में, जो दिखाता है।
यह एक व्याख्या की गई भाषा है जिसे समय-समय पर संकलित किया जा सकता है और यह सिंगल-थ्रेडेड है। हां, हां, मैं कई उदाहरणों को स्पिन करने और वेब कर्मचारियों के साथ संवाद करने के बारे में जानता हूं... लेकिन मेरी राय में, यह मल्टी-थ्रेडिंग नहीं है, यह एक अजीब वूडू वर्कअराउंड है जो हमें इस तथ्य से विचलित करने की कोशिश कर रहा है कि हमारे पास नेटिव मल्टी-थ्रेडिंग नहीं है ।
एक बड़ी समस्या यह है कि अन्य भाषाओं की तुलना में यह कंसोल पर काफी धीमी है।
जबकि जावास्क्रिप्ट एक पृष्ठ पर भयानक है, यह थोड़े कंसोल पर बेकार है।
तो जावास्क्रिप्ट डेवलपर्स का एक समूह एक दिन एक अंधेरे कमरे में एक साथ मिला और एक के बाद एक बहुत सारे पेय किसी ने कहा:
"अरे दोस्तों, क्या होगा अगर... मेरी बात सुनें... क्या होगा अगर हम अपने जावास्क्रिप्ट बनाने वाले टूल को जावास्क्रिप्ट में नहीं लिखते हैं?"
एक सामूहिक हांफना हुआ, कुर्सियाँ फेंकी गईं, लड़ाईयाँ हुईं और धूल जमने के बाद, हर कोई इसे आज़माने के लिए तैयार हो गया।
ठीक है, मैंने इसे बना लिया होगा लेकिन नतीजा अभी भी वही है, अब हम जावास्क्रिप्ट के अलावा अन्य भाषाओं में जावास्क्रिप्ट बिल्ड टूल्स बना रहे हैं।
लेकिन जंग क्यों?
एक शब्द में... गति और बफर-ओवरफ्लो ।
रस्ट एक बहु-प्रतिमान, सामान्य-उद्देश्य वाली प्रोग्रामिंग भाषा है जिसे प्रदर्शन और सुरक्षा के लिए डिज़ाइन किया गया है। यह C++ की तरह है लेकिन मिलेनियल्स और जूमर्स के लिए है। यह एक प्रणाली भाषा है जो स्मृति सुरक्षा को लागू करती है और इसमें "सुरक्षित" संगामिति है। यह वाक्यात्मक रूप से C++ के समान है और इससे भी महत्वपूर्ण बात यह है कि यह लगभग C++ जितना तेज़ है।
आशाजनक दावे
अभी ऐसी कई परियोजनाएँ हैं जो जावास्क्रिप्ट टूल को रस्ट-आधारित के साथ बदलना चाहती हैं। इसके कुछ उदाहरण हैं ParcelJS, Deno, ESBuild, और Speedy Web Compiler (SWC)। वे सभी जो कुछ भी बदलने की कोशिश कर रहे हैं उससे तेज़ी से प्रदर्शन करने का दावा करते हैं और यदि आप चकली चाहते हैं तो एस्बिल्ड तुलना देखें ।
इस पोस्ट के लिए, मैं उन सभी को नहीं देखूंगा, लेकिन मैं नेक्स्ट.जेएस के माध्यम से एसडब्ल्यूसी पर करीब से नज़र डालूंगा।
स्पीडी वेब कंपाइलर (एसडब्ल्यूसी)
एसडब्ल्यूसी अगली पीढ़ी के तेज डेवलपर टूल के लिए एक एक्स्टेंसिबल रस्ट-आधारित प्लेटफॉर्म है। यानी ये बिल्डर्स को बनाने का फ्रेमवर्क है। आप संकलन और बंडलिंग दोनों के लिए SWC का उपयोग कर सकते हैं। यह आधुनिक जावास्क्रिप्ट सुविधाओं का उपयोग करके जावास्क्रिप्ट/टाइपस्क्रिप्ट फ़ाइलों को लेगा और सभी प्रमुख ब्राउज़रों द्वारा समर्थित वैध कोड को थूक देगा।
नवीनतम नेक्स्ट.जेएस जंग खाए उपकरण
Next.js ने SWC पर आधारित संस्करण 12 में रस्ट कंपाइलर पेश किया। नेक्स्ट.जेएस साइट पर उन्होंने दावा किया कि स्थानीय स्तर पर ~3 गुना तेज रिफ्रेश और ~ 5 गुना तेज प्रोडक्शन बिल्ड।
यह मेरे लिए एक परीक्षण योग्य दावा जैसा लगता है। इसलिए मैंने इसका परीक्षण किया।
मैंने संस्करण 11 और 12 में सटीक एक ही प्रोजेक्ट बनाया और उसी 400 जेनरेट किए गए घटकों को जोड़ा। मैंने इसके लिए रिएक्ट बेंचमार्क जेनरेटर का इस्तेमाल किया। परियोजनाओं के बीच एकमात्र अंतर नेक्स्ट.जेएस के संस्करण का था, बाकी सब कुछ समान था।
परिणाम काफी आश्वस्त करने वाले थे। यहाँ Next.js 11 के लिए है:
और Next.js 12 के लिए, ये रहा:
Next.js 12 ने वह करने में 12 सेकंड का समय लिया जो Next.js 11 ने 1 मिनट 40 सेकंड में किया। यह लगभग 8 गुना तेज है। तो वे स्पष्ट रूप से अतिशयोक्ति नहीं कर रहे थे।
मुझे उम्मीद नहीं थी कि Next.js 12 12 सेकंड लेगा। मान लीजिए कि यह एक सुखद संयोग था।
क्या यह प्रचार के लायक है?
अब स्पष्ट प्रश्न है: क्या यह ऊधम के लायक है?
दिन के अंत में हम जो एप्लिकेशन बना रहे हैं, वही सही है? यह एंड-यूज़र अनुभव को केवल डेवलपर अनुभव में नहीं बदलता है, इसलिए परेशान क्यों हैं? जो पहले से ही ठीक काम कर रहा था उसे ठीक क्यों करें?
क्योंकि यह ठीक काम नहीं कर रहा था। जैसा कि मैंने पहले कहा था कि जावास्क्रिप्ट एक पृष्ठ पर बहुत अच्छा है लेकिन एक कंसोल पर बेकार है। डेवलपर मशीनें शक्तिशाली जानवर हैं और इस शक्ति का उपयोग नहीं करना एक भयानक बर्बादी है। यह एक महंगा कचरा भी है।
कल्पना कीजिए कि आप एक बड़ी परियोजना पर काम कर रहे 20 डेवलपर्स की एक टीम में हैं जो क्लाउड-आधारित सीआई पर तैनात और परीक्षण की जाती है। हर दिन आपकी टीम का प्रत्येक सदस्य कई सुधारों और सुविधाओं को आगे बढ़ाता है, यहां बताया गया है कि क्या होने की संभावना है।
यदि आपका सीआई असीमित समवर्ती बिल्ड देता है लेकिन बिल्ड मिनट या प्रोसेसर समय के सेकंड के हिसाब से चार्ज करता है तो नेक्स्ट.जेएस वास्तव में आपको नेक्स्ट.जेएस 12 की तुलना में 8 गुना अधिक खर्च करेगा।
दूसरी ओर, यदि यह एक निश्चित मूल्य और समवर्ती बिल्ड की एक निश्चित संख्या देता है तो आप थोड़ी देर के लिए प्रतीक्षा करने जा रहे हैं यदि आपकी बिल्ड कतार बढ़ती है या आपको समवर्ती बिल्ड की संख्या बढ़ाने के लिए भुगतान करना होगा जिसे आप चला सकते हैं।
किसी भी तरह से, धीमे निर्माण से आपको समय या धन, या दोनों में अधिक लागत आती है।
निष्कर्ष
जावास्क्रिप्ट एक अद्भुत भाषा है और इसके बिना इंटरनेट वहां नहीं होता जहां यह है। लेकिन हमें अपने उपकरण बनाने के लिए इसका उपयोग करने की आवश्यकता नहीं है क्योंकि इसके लिए कठिन, बेहतर, तेज, मजबूत भाषाएं हैं, जैसे रस्ट, और यह ठीक है। यह जावास्क्रिप्ट से दूर नहीं ले जाता है और यह तेजी से जंग-आधारित लोगों के लिए जावास्क्रिप्ट-आधारित निर्मित टूल को छोड़ने के लिए विश्वासघात नहीं है। और चलिए इसका सामना करते हैं, मैं सिर्फ वूडू मल्टी-थ्रेडिंग प्राप्त करने के लिए कई जावास्क्रिप्ट उदाहरणों से पीड़ित नहीं होने वाला हूं।