रूबी के नए संस्करणों में सुधार हो रहा है और रूबी 2.5 अलग नहीं है।
रूबी 2.5 इन अनुकूलन का परिचय देता है:
- एक बड़ी स्ट्रिंग बनने पर स्ट्रिंग इंटरपोलेशन लगभग 72% तेज हो जाएगा
- स्ट्रिंग#प्रीपेन्ड केवल एक तर्क दिए जाने पर लगभग 42% तेज हो जाएगा
- एन्यूमरेबल#सॉर्ट_बाय, एन्यूमरेबल#मिन_बाय और एन्यूमरेबल#मैक्स_बाय लगभग 50% तेज होगा
आइए कुछ बेंचमार्क देखें!
स्ट्रिंग इंटरपोलेशन प्रदर्शन
मैंने इस अनुकूलन के लिए प्रतिबद्ध संदेश में उदाहरण कोड लिया:
'बेंचमार्क/ips' की आवश्यकता हैBenchmark.ips do |x| x.report "लार्ज स्ट्रिंग इंटरपोलेशन" करते हैं |t| a ="Hellooooooooooooooooooooooooooooooooooooooooooooooooo" b ="Wooooooooooooooooooooooooooooooooooooooooooooooooooorld" t.times { "#{a}, #{b}!" } अंत x.report "स्मॉल स्ट्रिंग इंटरपोलेशन" do |t| a ="नमस्ते" b ="विश्व" t.times { "#{a}, #{b}!" } अंत x.तुलना!अंत
मैंने इस बेंचमार्क को निम्न परिणामों के साथ चलाया।
रूबी 2.4.1 :
छोटा स्ट्रिंग इंटरपोलेशन:3236291.1 i/sबड़ा स्ट्रिंग इंटरपोलेशन:1711633.4 i/s - 1.89x धीमा
रूबी 2.5 :
छोटा स्ट्रिंग इंटरपोलेशन:3125175.1 i/sबड़ा स्ट्रिंग इंटरपोलेशन:2555782.6 i/s - 1.22x धीमा
जैसा कि आप देख सकते हैं कि बड़े स्ट्रिंग्स के लिए अंतर बहुत उल्लेखनीय है!
स्ट्रिंग#प्रीपेन्ड प्रदर्शन
प्रीपेन्ड विधि आपको किसी सरणी के सामने कुछ पाठ सम्मिलित करने की अनुमति देती है।
रूबी 2.5 सबसे आम मामले के लिए अनुकूलित करता है, केवल एक स्ट्रिंग को दूसरे में प्रस्तुत करता है।
यहाँ बेंचमार्क परिणाम हैं।
रूबी 2.4.1 परिणाम:
स्ट्रिंग#प्रीपेन्ड 3.428M (± 3.2%) i/s - 17.159M 5.011008s में
रूबी 2.5 परिणाम:
स्ट्रिंग#प्रीपेन्ड 4.638M (± 3.6%) i/s - 23.276M 5.025562s में
यह काफी अच्छा सुधार है!
संख्यात्मक प्रदर्शन सुधार
कुछ एन्यूमरेबल मेथड्स को परफॉर्मेंस अपग्रेड मिल रहा है।
यह विशेष अनुकूलन काम करता है क्योंकि यह <=>
. के लिए प्रेषण विधि को छोड़ देता है विधि।
जैसा कि प्रतिबद्ध संदेश में वर्णित है:
<ब्लॉककोट>
"<=>
. के बजाय वस्तुओं की तुलना करने के लिए OPTIMIZED_CMP() का उपयोग करें फिक्सनम/फ्लोट/स्ट्रिंग ऑब्जेक्ट के लिए प्रेषण विधि।"
मेरे बेंचमार्क परिणाम ये हैं।
रूबी 2.4.2 :
एन्यूमरेबल#सॉर्ट_बाय 2.395k (± 6.7%) i/s - 11.952k 5.014422s में Enumerable#min_by 8.244k (± 6.1%) i/s - 41.405k 5.042327s में Enumerable#max_by 8.053k (± 6.7%) i /s - 5.015375s में 40.180k
रूबी 2.5 :
एन्यूमरेबल#सॉर्ट_बाय 5.914k (± 6.7%) i/s - 29.786k 5.062584s में संख्यात्मक#min_by 15.668k (± 3.0%) i/s - 78.888k 5.039748s में संख्यात्मक#max_by 15.544k (± 2.3%) i /s - 5.046709 में 78.408k
यह लगभग 50% सुधार है 🙂
रेंज#मिनट और रेंज#अधिकतम
मेरे पास आपके लिए दो बोनस प्रदर्शन अनुकूलन हैं!
एक रेंज#मिनट और रेंज#अधिकतम विधियों के बारे में है।
यहाँ बेंचमार्क हैं:
रूबी 2.4.2
रेंज#मिनट 7.976M (± 3.0%) i/s - 39.950M 5.013242s में रेंज#अधिकतम 7.996M (± 3.4%) i/s - 40.059M 5.015984s में
रूबी 2.5
रेंज#मिनट 13.154M (± 3.0%) i/s - 65.731M 5.002094s में रेंज#अधिकतम 13.021M (± 2.6%) i/s - 65.02M 5.010924s में
यहां प्रतिबद्धता खोजें।
बेहतर स्ट्रिंग#स्कैन
प्रतिबद्ध संदेश के अनुसार यह एक स्ट्रिंग पैटर्न के लिए 50% और रेगेक्स पैटर्न के लिए 10% तक प्रदर्शन में सुधार करता है।
आइए बेंचमार्क देखें!
रूबी 2.4.2
स्ट्रिंग#स्कैन - स्ट्रिंग पैटर्न 1.367M (±19.8%) i/s - 6.458M 4.982047s मेंरूबी 2.5
स्ट्रिंग#स्कैन - स्ट्रिंग पैटर्न 3.944M (±24.4%) i/s - 17.739M 4.977417s मेंतेज़ स्कैनिंग की शुभकामनाएँ!
सारांश
आपने रूबी 2.5 में आने वाले नए अनुकूलन के बारे में सीखा, जो 25 दिसंबर को रिलीज़ होगा।
ये अनुकूलन स्ट्रिंग इंटरपोलेशन, एन्यूमरेबल विधियों,
String#prepend
के बारे में हैं विधि,String#scan
विधि औरRange#max
/Range#mix
तरीके।मुझे आशा है कि आपको यह पोस्ट अच्छा लगा होगा!
पोस्ट को शेयर करना न भूलें अपने पसंदीदा सामाजिक नेटवर्क पर 🙂