নতুন রুবি সংস্করণগুলি উন্নতি করতে থাকে এবং রুবি 2.5 আলাদা নয়৷
৷রুবি 2.5 এই অপ্টিমাইজেশনগুলি প্রবর্তন করে:
- একটি বড় স্ট্রিং তৈরি হলে স্ট্রিং ইন্টারপোলেশন প্রায় 72% দ্রুত হবে
- স্ট্রিং#প্রেপেন্ড প্রায় 42% দ্রুত হবে যদি শুধুমাত্র একটি যুক্তি দেওয়া হয়
- গণনাযোগ্য#sort_by, Enumerable#min_by &Enumerable#max_by প্রায় 50% দ্রুত হবে
আসুন কিছু বেঞ্চমার্ক দেখি!
স্ট্রিং ইন্টারপোলেশন পারফরম্যান্স
আমি এই অপ্টিমাইজেশানের জন্য কমিট মেসেজে উদাহরণ কোডটি নিয়েছি:
'benchmark/ips'Benchmark.ips করতে হবে |x| x.report "বড় স্ট্রিং ইন্টারপোলেশন" do |t| a ="Hellooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo)" b ="Woooooooooooooooooooooooooooooooo" t.times { "#{a}, #{b}!" } end x.report "Small string interpolation" do |t| a ="হ্যালো" b ="বিশ্ব" t.times { "#{a}, #{b}!" } শেষ x.compare!end
আমি নিম্নলিখিত ফলাফলের সাথে এই বেঞ্চমার্কটি চালিয়েছি৷
৷রুবি 2.4.1 :
ছোট স্ট্রিং ইন্টারপোলেশন:3236291.1 i/sLarge string interpolation: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 :
গণনাযোগ্য#sort_by 2.395k (± 6.7%) i/s - 11.952k in 5.014422sEnumerable#min_by 8.244k (± 6.1%) i/s - 41.405k in 5.042327 (± 6.7% 327s) সর্বাধিক। /s - 40.180k 5.015375s
রুবি 2.5 :
গণনাযোগ্য#sort_by 5.914k (± 6.7%) i/s - 29.786k in 5.062584sEnumerable#min_by 15.668k (± 3.0%) i/s - 78.888k 5.03974k-এর মধ্যে 5.03974k (সর্বোচ্চ। /s - 78.408k 5.046709s
এটি প্রায় 50% উন্নতি 🙂
৷পরিসীমা#মিনিট এবং রেঞ্জ#সর্বোচ্চ
আমি আপনার জন্য দুটি বোনাস কর্মক্ষমতা অপ্টিমাইজেশান আছে!
একটি হল রেঞ্জ#মিন এবং রেঞ্জ#সর্বোচ্চ পদ্ধতি।
এখানে মানদণ্ড রয়েছে:
রুবি 2.4.2
পরিসীমা#মিনিট 7.976M (± 3.0%) i/s - 39.950M 5.013242s রেঞ্জ# সর্বোচ্চ 7.996M (± 3.4%) i/s - 5.015984s মধ্যে 40.059M
রুবি 2.5
পরিসীমা#মিনিট 13.154M (± 3.0%) i/s - 5.002094s মধ্যে 65.731M রেঞ্জ# সর্বোচ্চ 13.021M (± 2.6%) i/s - 5.010924s মধ্যে 65.202M
এখানে প্রতিশ্রুতি খুঁজুন।
উন্নত স্ট্রিং#স্ক্যান
কমিট মেসেজ অনুযায়ী এটি একটি স্ট্রিং প্যাটার্নের জন্য 50% এবং রেজেক্স প্যাটার্নের জন্য 10% পারফরম্যান্স উন্নত করে।
আসুন বেঞ্চমার্কগুলি দেখি!
রুবি 2.4.2
স্ট্রিং#স্ক্যান - স্ট্রিং প্যাটার্ন 1.367M (±19.8%) i/s - 6.458M in 4.982047sString#scan - Regex প্যাটার্ন 1.228M (±17.0%) i/s - 4.983943s>প্রে 5.881Mরুবি 2.5
স্ট্রিং#স্ক্যান - স্ট্রিং প্যাটার্ন 3.944M (±24.4%) i/s - 17.739M in 4.977417sString#scan - Regex প্যাটার্ন 1.696M (±17.4%) i/s - 4.982614s-এ 8.103Mখুশি দ্রুত স্ক্যানিং!
সারাংশ
আপনি রুবি 2.5 এ আসছে নতুন অপ্টিমাইজেশন সম্পর্কে শিখেছেন, যা 25 ডিসেম্বর মুক্তি পাবে৷
এই অপ্টিমাইজেশানগুলি হল স্ট্রিং ইন্টারপোলেশন, গণনাযোগ্য পদ্ধতি,
String#prepend
পদ্ধতি,String#scan
পদ্ধতি এবংRange#max
/Range#mix
পদ্ধতি।আমি আশা করি আপনি এই পোস্টটি উপভোগ করেছেন!
পোস্টটি শেয়ার করতে ভুলবেন না আপনার প্রিয় সামাজিক নেটওয়ার্কগুলিতে 🙂
৷