কম্পিউটার টিউটোরিয়াল

রুবি ২.৫ পারফরম্যান্স বूस্ট: ৭২% দ্রুত স্ট্রিং ইন্টারপোলেশন, ৫০% দ্রুত Enumerable মেথড

নতুন রুবি ভার্সনগুলো উন্নত হতে থাকে এবং রুবি ২.৫ ভিন্ন নয়।

রুবি ২.৫ এই অপ্টিমাইজেশনগুলো নিয়ে এসেছে:

  • বড় স্ট্রিং তৈরি করার সময় স্ট্রিং ইন্টারপোলেশন প্রায় ৭২% দ্রুত হবে
  • শুধু একটি আর্গুমেন্ট দিলে String#prepend প্রায় ৪২% দ্রুত হবে
  • Enumerable#sort_by, Enumerable#min_by এবং Enumerable#max_by প্রায় ৫০% দ্রুত হবে

আসুন কিছু বেঞ্চমার্ক দেখি!

স্ট্রিং ইন্টারপোলেশন পারফরম্যান্স

আমি এই অপ্টিমাইজেশনের কমিট মেসেজের উদাহরণ কোড নিলাম:

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

আমি এই বেঞ্চমার্কটি নিচের ফলাফল দিয়ে রান করলাম।

Ruby 2.4.1:

Small string interpolation: 3236291.1 i/s
Large string interpolation: 1711633.4 i/s - 1.89x slower

Ruby 2.5:

Small string interpolation: 3125175.1 i/s
Large string interpolation: 2555782.6 i/s - 1.22x slower

আপনি দেখতে পাচ্ছেন বড় স্ট্রিং-এর জন্য পার্থক্য খুব রিমার্কেবল!

String#prepend পারফরম্যান্স

prepend মেথড আপনাকে একটি অ্যারেতে সামনে কিছু টেক্সট ইনসার্ট করতে দেয়।

রুবি ২.৫ সবচেয়ে কমন কেসের জন্য অপ্টিমাইজ করেছে, শুধু একটি স্ট্রিং অন্য স্ট্রিং-এর সামনে প্রিপেন্ড করা।

এখানে বেঞ্চমার্ক ফলাফল।

Ruby 2.4.1 ফলাফল:

String#prepend 3.428M (± 3.2%) i/s - 17.159M in 5.011008s

Ruby 2.5 ফলাফল:

String#prepend 4.638M (± 3.6%) i/s - 23.276M in 5.025562s

এটি একটি খুব ভালো উন্নতি!

Enumerable পারফরম্যান্স উন্নতি

কয়েকটি Enumerable মেথড পারফরম্যান্স আপগ্রেড পাচ্ছে।

এই নির্দিষ্ট অপ্টিমাইজেশন কাজ করে কারণ এটি <=> মেথড ডিসপ্যাচিং স্কিপ করে।

কমিট মেসেজে বর্ণনা অনুযায়ী:

"Fixnum/Float/String অবজেক্টের জন্য <=> মেথড ডিসপ্যাচিংর বদলে OPTIMIZED_CMP() ব্যবহার করে অবজেক্টগুলো তুলনা করুন।"

এখানে আমার বেঞ্চমার্ক ফলাফল।

Ruby 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

Ruby 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

এটি প্রায় ৫০% উন্নতি 🙂

Range#min এবং Range#max

আপনাদের জন্য দুটি বোনাস পারফরম্যান্স অপ্টিমাইজেশন আছে!

একটি হলো Range#min এবং Range#max মেথড সম্পর্কে।

এখানে বেঞ্চমার্ক:

Ruby 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

Ruby 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

কমিট মেসেজ অনুযায়ী এটি স্ট্রিং প্যাটার্নের জন্য ৫০% এবং রেগেক্স প্যাটার্নের জন্য ১০% পারফরম্যান্স উন্নত করে।

আসুন বেঞ্চমার্ক দেখি!

Ruby 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

Ruby 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

দ্রুত স্ক্যানিংয়ের জন্য শুভকামনা!

সারসংক্ষেপ

আপনি রুবি ২.৫-এ আসছে নতুন অপ্টিমাইজেশনগুলো সম্পর্কে শিখতে পেরেছেন, যা ডিসেম্বর ২৫-এ রিলিজ হবে।

এই অপ্টিমাইজেশনগুলো স্ট্রিং ইন্টারপোলেশন, Enumerable মেথড, String#prepend মেথড, String#scan মেথড এবং Range#max / Range#min মেথড সম্পর্কে।

আশা করি আপনি এই পোস্টটি উপভোগ করেছেন!

পোস্টটি শেয়ার করুন আপনার প্রিয় সোশ্যাল নেটওয়ার্কে 🙂

  1. Microsoft Edge ব্রাউজারে পারফরম্যান্স স্ক্রোলিং উন্নতি

  2. রুবিতে বিটওয়াইজ অপারেশন মাস্টার করুন: টিপস অ্যান্ড ট্রিকস

  3. রুবিতে ল্যাম্বডা মাস্টার করুন: বেসিক থেকে অ্যাডভান্সড টেকনিক

  4. রুবি ২.৬-এ ৯টি গুরুত্বপূর্ণ উন্নতির অন্বেষণ