ExecJS या रूबी में जावास्क्रिप्ट निष्पादित करने के तरीके के बारे में इतिहास

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

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

चूंकि पेट्या और वास्या को कुछ भी नहीं पता था, लेकिन एक जावास्क्रिप्ट के आधार पर, उन्होंने अपने उत्पादों को इस पर लिखा था।

और यहाँ, फिर से, मान लीजिए, दुनिया में पहली बार रेल पर अपने शांत वेबडवागन परियोजना के लिए इन अद्भुत चीजों को पेंच करने का विचार आया। आपको वास्तव में GreenTeaScript पर फ्रंटएंड लिखना पसंद था, और BeautifyJS का उपयोग करके स्क्रिप्ट को संपीड़ित करना संभवतः साइट को बहुत गति देगा।

अब मज़ा शुरू होता है।

जावास्क्रिप्ट कोर


दोनों कार्यक्रम जावास्क्रिप्ट में लिखे गए हैं, और हमें किसी तरह उन्हें रेल से निष्पादित करने की आवश्यकता है। एक त्वरित googling आपको बताता है कि makoshi में, जिसे आप, उदाहरण के लिए, उपयोग करते हैं, एक अंतर्निहित JavaScriptCore है जिसे कंसोल से कमांड /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc साथ लॉन्च किया जा सकता है। आप जल्दी से एक कक्षा लिखते हैं जो जावास्क्रिप्ट का एक टुकड़ा लेती है, इस चीज़ को खिलाती है, परिणाम और वॉइला को पार्स करती है - सब कुछ काम करता है! Nishtyak।

JScript


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

NodeJS


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

therubyracer


यह परियोजना तेजी से लोकप्रियता हासिल कर रही है, निवेशकों की एक लाइन दरवाजे के नीचे जमा हो रही है, जो तत्काल आपको टन पैसा देना चाहते हैं, और सर्वर सामना करना बंद कर देता है। आप एक सिस्टम व्यवस्थापक को काम पर रख रहे हैं जिसके कार्यों में नए सर्वर स्थापित करना और कॉन्फ़िगर करना शामिल होगा। सिस्टम प्रशासक साहसपूर्वक व्यापार के लिए नीचे आता है, 5 नए सर्वर को रोल करता है, उन्हें तैनात करता है और सब कुछ फिर से टूट जाता है। यह पता चला है कि नए सर्वरों पर NodeJS का संस्करण पहले सर्वर पर एक से थोड़ा अलग है। और यह /bin/node में झूठ नहीं है, लेकिन /usr/local/bin/node । और सामान्य तौर पर, व्यवस्थापक के अनुसार, बाहरी निर्भरता शांत नहीं होती है और यह आवश्यक है, वे कहते हैं, उनसे छुटकारा पाने के लिए।
आप खुद को पाठ्यपुस्तक "सी ++ से 3 घंटे में खरोंच" के साथ बाँधते हैं और एक नया रत्न लिखने के लिए स्वतंत्र महसूस करते हैं जो आपको रूबी से सीधे नोड्स वी 8 इंजन का उपयोग करने की अनुमति देगा। नतीजतन, आपको थेरैब्रायसर मिलता है। स्थापित करते समय, मणि सैंडबॉक्स में वांछित संस्करण का अपना वी 8 एकत्र करता है और सीधे इसका उपयोग करता है। Lepota!
अब आप बैसाखी के उस पहाड़ को साफ कर सकते हैं जो जावास्क्रिप्ट को निष्पादित करने के लिए ज़िम्मेदार था और यह सब एक सुंदर वर्ग के साथ बदल देता है जो बस उपचार का उपयोग करता है। एक संस्करण हर जगह Gemfile.lock में पंजीकृत है, सब कुछ जल्दी से काम करता है और सभी ऑपरेटिंग सिस्टम में समान है, हर कोई खुश है।

therubyrhino


एक बार जब आप JRuby के बारे में हब पर एक लेख पढ़ें। लेख, अन्य बातों के अलावा, कहता है कि जुरी बहुत तेज और आम तौर पर शांत है। एक प्रयोग के रूप में, आप JRuby पर अपनी परियोजना शुरू करने और बेंचमार्क ड्राइव करने का निर्णय लेते हैं। स्वाभाविक रूप से, सब कुछ चिकित्सीय रूप से अलग हो जाता है, जो JRuby के तहत काम नहीं करता है।
तो आप घुटने पर एक नया मणि इकट्ठा करते हैं, थेरिबिहिनो , जो मूल रूप से थेरैबरिसर के समान काम करता है, लेकिन मोज़िला जावास्क्रिप्ट इंजन का उपयोग करता है और जेरीबी में काम करता है। हमने सामान्य रूप से बेंचमार्क को हटा दिया और शांत कर दिया।

सभी एक साथ


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

यह सब लंबी कहानी क्यों? और इस तथ्य के लिए कि नई रेल 3.1 में, डिफ़ॉल्ट रूप से, कॉफीस्क्रिप्ट और UglifyJS के लिए समर्थन जोड़ा जाता है। यह लगभग हमारे काल्पनिक ग्रीनटाइपस्क्रिप्ट और ब्यूटिफाइजेएसएस के समान है, केवल बहुत महत्वाकांक्षी है। और रेल कोर टीम को उन्हीं समस्याओं का सामना करना पड़ा, जो हम सिर्फ असली के लिए कर रहे थे।

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

यह इस तरह से कुछ काम करता है:
 require 'rubygems' #      1.8 require 'execjs' #      jsfunc = <<JS function square(n){ return n*n; } JS #   context = ExecJS.compile(jsfunc) #     context.call('square', 10) # => 100 #     ExecJS.eval 'Math.pow(10, 2)' # => 100 


जैसा कि आप देख सकते हैं, सब कुछ काफी पारदर्शी और सरल है। विवरणों में तल्लीन करना आवश्यक नहीं है, यह सिर्फ सबसे इष्टतम तरीके से काम करता है।

इस प्रकार, यह पता चला है कि रूबी में जावास्क्रिप्ट का पीछा करना अब धमाकेदार शलजम की तुलना में आसान है। मेरी राय में, यह बहुत अच्छा है!

Source: https://habr.com/ru/post/In121167/


All Articles