Enumerable#sort_by is not always faster than #sort
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 25/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Cần làm rõ
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- ruby
- Lĩnh vực
- performance
Hướng nghiên cứu
Bắt đầu bằng cách chạy ví dụ benchmark-ips được cung cấp và so sánh sort_by với sort trên các phiên bản Ruby được đề cập trong issue. Payload không nêu tệp nào trong repository, bài kiểm thử hay thay đổi dự kiến, vì vậy bước tiếp theo là tìm bất kỳ mục benchmark liên quan nào và làm rõ liệu kết quả dự kiến là thay đổi phần triển khai, cập nhật benchmark hay tài liệu.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Per the Ruby 2.4.0 docs:
The current implementation of sort_by generates an array of tuples containing the original collection element and the mapped value. This makes sort_by fairly expensive when the keysets are simple.
Here's a concrete example showing sort to be 2.70x faster in Ruby 1.9.3, 2.3.3 and 2.4.0:
require 'benchmark/ips'
Benchmark.ips do |x|
x.time = 5
x.warmup = 2
ARRAY = %w{apple pear fig}
x.report("sort_by") do
ARRAY.sort_by(&:length)
end
x.report("sort") do
ARRAY.sort { |a, b| a.length <=> b.length}
end
x.compare!
end
Warming up --------------------------------------
sort_by 56.348k i/100ms
sort 111.946k i/100ms
Calculating -------------------------------------
sort_by 635.646k (±16.1%) i/s - 3.099M in 5.074036s
sort 1.713M (±16.3%) i/s - 8.284M in 5.023904s
Comparison:
sort: 1713232.1 i/s
sort_by: 635645.9 i/s - 2.70x slower
- Ngôn ngữ chính
- Ruby
- Star
- 5.7k
- Fork
- 370
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của fastruby/fast-ruby
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 52/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 32/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 42/100
Tất cả issue của fastruby/fast-ruby
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
riscv/riscv-unified-db#2626 ·
-
Component: GLib
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
ds-drift
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
we-promise/sure#3693 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
simp/pupmod-simp-simp#395 ·