Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

रूबी 2.5 परफॉरमेंस बूस्ट: 72% तेज स्ट्रिंग इंटरपोलेशन, 50% तेज Enumerable मेथड्स

नए रूबी संस्करण बेहतर होते रहते हैं और रूबी 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 मेथड्स के बारे में हैं।

मुझे उम्मीद है कि आपको यह पोस्ट पसंद आया!

अपने पसंदीदा सोशल नेटवर्क पर पोस्ट शेयर करना न भूलें 🙂

  1. Ruby में बिटवाइज़ ऑपरेशन में महारत हासिल करें: टिप्स और ट्रिक्स Ruby में बिटवाइज़ ऑपरेशन में महारत हासिल करें: टिप्स और ट्रिक्स

    संभावना है कि आपको आमतौर पर अपनी दैनिक नौकरी में किसी बिटवाइज़ गणित की आवश्यकता नहीं होती। Ruby के बिटवाइज़ AND और OR ऑपरेटर (& और |) शायद उद्देश्य से अधिक दुर्घटना से उपयोग किए जाते हैं। किसने गलती से && के बजाय & टाइप नहीं किया है? लेकिन अगर आप C या असेंबलर जैसी निचले स्तर की भाषाओं में प्रोग्रामि

  1. Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक Ruby में Lambdas में महारत हासिल करें: बुनियादी से उन्नत तकनीकें तक

    ब्लॉक Ruby का इतना महत्वपूर्ण हिस्सा हैं, उनके बिना भाषा की कल्पना करना कठिन है। लेकिन लैम्ब्डा? कौन लैम्ब्डा से प्यार करता है? आप वर्षों तक बिना एक का उपयोग किए जा सकते हैं। वे लगभग एक बीते युग के अवशेष लगते हैं। ...लेकिन यह पूरी तरह सच नहीं है। लैम्ब्डा की आस्तीन में कुछ दिलचस्प तरकीबें हैं एक बार

  1. Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण Ruby 2.6 में 9 प्रमुख संवर्द्धन का अन्वेषण

    Ruby का एक नया संस्करण नई सुविधाओं और प्रदर्शन सुधारों के साथ आ रहा है। क्या आप परिवर्तनों के साथ बने रहना चाहेंगे? आइए एक नज़र डालते हैं! अंतहीन रेंज (Endless Ranges) Ruby 2.5 और पुराने संस्करण पहले से ही अंतहीन रेंज का एक रूप (Float::INFINITY के साथ) का समर्थन करते हैं, लेकिन Ruby 2.6 इसे अगले स्त