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

रूबी 2.5 . में प्रदर्शन में सुधार

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

मुझे आशा है कि आपको यह पोस्ट अच्छा लगा होगा!

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


  1. रूबी में बिटवाइज़ हैक्स

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

  1. रूबी में लैम्ब्डा का उपयोग करना

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

  1. रूबी में 9 नई सुविधाएँ 2.6

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