নতুন রুবি ভার্সনগুলো উন্নত হতে থাকে এবং রুবি ২.৫ ভিন্ন নয়।
রুবি ২.৫ এই অপ্টিমাইজেশনগুলো নিয়ে এসেছে:
- বড় স্ট্রিং তৈরি করার সময় স্ট্রিং ইন্টারপোলেশন প্রায় ৭২% দ্রুত হবে
- শুধু একটি আর্গুমেন্ট দিলে 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 মেথড সম্পর্কে।
আশা করি আপনি এই পোস্টটি উপভোগ করেছেন!
পোস্টটি শেয়ার করুন আপনার প্রিয় সোশ্যাল নেটওয়ার্কে 🙂