fastruby / fastruby/fast-ruby

`str.count("\n")` is 1.3-170 times faster than `str.lines.count` or `str.each_line.count` depending on the string size

Đang mở
#220 6 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Ruby
Star
5.7k
Fork
371
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

`str.count("\n")` is 1.3-170 times faster than `str.lines.count` or `str.each_line.count` (ref: https://serpapi.com/blog/lines-count-failed-deployments/). The speed difference grows with the lines count.

```bash
$ ruby tmp/string_count_benchmark.rb
Warming up --------------------------------------
String#count('\n') 86.000 i/100ms
String#lines.size 1.000 i/100ms
String#lines.count 1.000 i/100ms
String#each_line.count
1.000 i/100ms
Calculating -------------------------------------
String#count('\n') 771.031 (± 6.6%) i/s - 3.870k in 5.041849s
String#lines.size 4.785 (± 0.0%) i/s - 24.000 in 5.037242s
String#lines.count 4.513 (± 0.0%) i/s - 23.000 in 5.112095s
String#each_line.count
4.763 (± 0.0%) i/s - 24.000 in 5.075882s

Comparison:
String#count('\n'): 771.0 i/s
String#lines.size: 4.8 i/s - 161.12x (± 0.00) slower
String#each_line.count: 4.8 i/s - 161.87x (± 0.00) slower
String#lines.count: 4.5 i/s - 170.86x (± 0.00) slower
```

Benchmark code:

```ruby
require "benchmark/ips"

HTML = "\nruby\n" * 1024 * 1024

def fastest
HTML.count("\n")
end

def faster
HTML.each_line.count
end

def fast
HTML.lines.length
end

def slow
HTML.lines.size
end

Benchmark.ips do |x|
x.report("String#count('\\n')") { fastest }
x.report("String#lines.size") { faster }
x.report("String#lines.count") { fast }
x.report("String#each_line.count") { slow }
x.compare!
end
```

I'd like to add this benchmark to `fast-ruby`. Wdyt?

---

Based on our updates to the @guilhermesimoes' very helpful gist: https://gist.github.com/guilhermesimoes/d69e547884e556c3dc95?permalink_comment_id=4687645#gistcomment-4687645

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.