स्ट्रिंग इंटरपोलेशन। परी कथा साकार

समस्या का बयान


दुर्घटना से काफी परेशान, मैं एक अजगर से एक जेएस डेवलपर में बदल गया, और जेएस में मौजूद चीजों का अत्यधिक भार मेरे नाजुक बच्चों के मानस पर नहीं पड़ा। उदाहरण के लिए, स्ट्रिंग्स का कोई सुविधाजनक स्वरूपण नहीं है। अजगर पर आप लिख सकते हैं:
'hello, %(thing)s' % {'thing': 'world'} 

या इस तरह:
 'hello, {thing}'.format(**{'thing': 'world'}) 



जेएस में निकटतम एनालॉग कॉन्सेटेशन ( operator + ) है, जो लाइन की बढ़ती लंबाई के साथ बहुत खराब पैमाने पर है, और यहां तक ​​कि सीमा तक बदसूरत दिखता है:
 '<div class="input-append"><input type="text" name="username" '+ 'id="signup_username" placeholder="'+placeholder+'"><input '+ 'type="hidden" name="password" value="'+generated+'"><button '+ ... 

हो सके तो मैं इससे बचना चाहूंगा।

जेरेमी एशकेनस, जब कॉफ़ीस्क्रिप्ट विकसित कर रहे हैं, ने भी जेएस की इस विशेषता पर ध्यान आकर्षित किया, और संयोग से PHP की एक बोली:
 "hello, #{document.cookie}" 

यह भी खराब है, इसके अलावा यह केवल स्ट्रिंग शाब्दिक के लिए काम करता है, यह किसी फ़ाइल से टेम्पलेट को लोड करने के लिए काम नहीं करेगा।

मुझे इस चीज़ में रूबी जैसा सिंटैक्स पसंद है, लेकिन मुझे हर चीज पसंद नहीं है, खासकर एक स्ट्रिंग के अंदर मनमाने कोड का निष्पादन। इस प्रकार, समस्या का बयान:
- एक फ़ंक्शन लिखें
- जो एक चर में चर को प्रतिस्थापित करता है
- फाइल से लोड किया गया
- PHP नहीं

समाधान के लिए खोजें


आमतौर पर, ऐसे मामलों में, तैयार किए गए पुस्तकालयों का उपयोग किया जाता है, इसके अलावा, एनपीएम में शब्द टेम्पलेट के अनुसार दो हजार से अधिक पैकेज होते हैं।

वास्तव में, मूंछें या लॉश (अंडरस्कोर। जेएस) ठीक काम करता है, लेकिन ... बहुत धीरे-धीरे: 10-20 μs प्रति देखने के लिए। किसी भी मामले में सपने की सीमा नहीं है, खासकर जब लूप और फिल्टर जैसी "उन्नत" कार्यक्षमता की बिल्कुल आवश्यकता नहीं है।

लेकिन संगति, हालांकि यह डरावना लगता है, सामूहिकता के एक जानवर की मुस्कराहट की तरह, अभी भी 10-30 गुना तेजी से काम करता है। इस प्रकार, हम समस्या के बयान में जोड़ते हैं:
- संगति में अनुवाद
- और बहुत तेजी से काम करता है

अब, इस विनिर्देश के अनुसार, आप पहिया को फिर से मजबूत कर सकते हैं। क्योंकि क्यों नहीं।

क्या हुआ?


मुझे इस तरह की बात मिली: रूबी की तरह सरल स्ट्रिंग प्रक्षेप (GitHub)

इसमें कोड की 9 लाइनें हैं, और यह एक ही मशीन पर प्रति मिलियन एक लाख तीन सौ हजार प्रतिस्थापन करता है (लगभग 0.77 microseconds प्रति प्रतिस्थापन), जहां मूंछ 130 हजार और दूसरी बार दर्ज करें / अनड्रेसकोर 45 हजार प्रतिस्थापन करता है।
 var hello = fmt('hello, #{thing}') hello({thing: 'world'}) // -> hello, world 

निष्कर्ष: टेम्पलेट इंजन (लूप्स, सशर्त अभिव्यक्तियों) के जटिल कार्यों की अस्वीकृति के कारण, टेम्पलेट में मनमाने कोड के निष्पादन का सहारा लिए बिना लोकप्रिय पुस्तकालयों की तुलना में 10-30 गुना का त्वरण प्राप्त किया गया था।

Rssi.js npm से स्थापित किया जा सकता है स्पष्ट npm install rssi , Bower ( bower install rssi ) भी समर्थित है; क्लाइंट पक्ष पर, आप AMD (आवश्यकताएँ) का उपयोग कर सकते हैं, लेकिन आप इसका उपयोग नहीं कर सकते।



यह बहुत सुसंगत पाठ नहीं पढ़ने के लिए धन्यवाद! पैच, सज्जनों, अच्छे लोगों को लिखें, और जल्द ही आपको देखें।

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


All Articles