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