Improve the performance using the hints by rubocop-performance and fasterer
@anew-bhav đang làm issue này rồi.
Từ ngày 31/5/2021.
Đá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
- 38/100
- Loại issue
- Tái cấu trúc
- Độ rõ ràng
- Khá rõ ràng
- 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 với các tệp và vị trí dòng được liệt kê trong các báo cáo của rubocop-performance và fasterer, đặc biệt là các tệp parser, XPath, quickpath, node, element và doctype. Chạy cả hai công cụ trên dự án và xem xét từng thay đổi được đề xuất để bảo toàn hành vi. Được coi là hoàn tất khi các vi phạm được báo cáo đã được xử lý và các kiểm tra hiện có vẫn đạt.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
rubocop-performance (see https://github.com/rubocop-hq/rubocop-performance ) says:
Offenses:
/usr/lib/ruby/2.7.0/rexml/attlistdecl.rb:45:7: C: Performance/InefficientHashSearch: Use #key? instead of #keys.include?.
@pairs.keys.include? key
^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/doctype.rb:201:7: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
quoted_string =~ /^[\'\"].*[\'\"]$/ ?
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/element.rb:255:43: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
prefix = "xmlns:#{prefix}" unless prefix =~ /^xmlns:/
^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/entity.rb:44:12: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
if stream[2] =~ /SYSTEM|PUBLIC/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/node.rb:56:9: C: Performance/RedundantBlockCall: Use yield instead of block.call.
block.call(node)
^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/node.rb:65:24: C: Performance/RedundantBlockCall: Use yield instead of block.call.
return node if block.call(node)
^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parseexception.rb:32:67: C: Performance/StringReplacement: Use tr instead of gsub.
err << @source.buffer[0..80].force_encoding("ASCII-8BIT").gsub(/\n/, ' ')
^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/baseparser.rb:476:25: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
return false if /\AUTF-16\z/i =~ xml_declaration_encoding
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/pullparser.rb:73:29: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
event[2] unless event[2] =~ /PUBLIC|SYSTEM/
^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/treeparser.rb:81:54: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/
^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/xpathparser.rb:304:14: C: Performance/RegexpMatch: Use match? instead of !~ when MatchData is not used.
if path !~ /^\s*\)/
^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/parsers/xpathparser.rb:539:41: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
rest = LocationPath(rest, n) if rest =~ /\A[\/\.\@\[\w*]/
^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/ruby/2.7.0/rexml/quickpath.rb:108:49: C: Performance/RegexpMatch: Use match? instead of =~ when MatchData is not used.
matches = filter( elements.dup, rest ) if axe_name =~ /-or-self$/u
^^^^^^^^^^^^^^^^^^^^^^^^
49 files inspected, 13 offenses detected
fasterer (see https://github.com/DamirSvrtan/fasterer) says:
validation/relaxng.rb:416 Calling argumentless methods within blocks is slower than using symbol to proc.
validation/relaxng.rb:523 Calling argumentless methods within blocks is slower than using symbol to proc.
parsers/xpathparser.rb:602 For loop is slower than using each.
parsers/baseparser.rb:381 For loop is slower than using each.
formatters/default.rb:70 Calling argumentless methods within blocks is slower than using symbol to proc.
xpath_parser.rb:105 For loop is slower than using each.
xpath_parser.rb:120 For loop is slower than using each.
xpath_parser.rb:458 Enumerable#sort is slower than Enumerable#sort_by.
xpath_parser.rb:590 Using each_with_index is slower than while loop.
quickpath.rb:88 Calling argumentless methods within blocks is slower than using symbol to proc.
quickpath.rb:133 Calling argumentless methods within blocks is slower than using symbol to proc.
quickpath.rb:135 Calling argumentless methods within blocks is slower than using symbol to proc.
quickpath.rb:138 Calling argumentless methods within blocks is slower than using symbol to proc.
node.rb:54 Calling blocks with call is slower than yielding.
node.rb:63 Calling blocks with call is slower than yielding.
functions.rb:42 Calling argumentless methods within blocks is slower than using symbol to proc.
element.rb:1068 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1075 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1128 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1212 Hash#fetch with second argument is slower than Hash#fetch with block.
element.rb:1246 Calling argumentless methods within blocks is slower than using symbol to proc.
doctype.rb:283 Use attr_reader for reading ivars.
49 files inspected, 22 offenses detected
- Ngôn ngữ chính
- Ruby
- Star
- 181
- Fork
- 105
- Merge trung bình
- 11 giờ 3 phút
- Pull request đã merge (30 ngày)
- 1
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
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 ruby/rexml
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
-
XPath underscored function name is wrongly acceptedCó thể đã có người làm @sjh9714 đã nhận 48 ngày trước. Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 55/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 35/100
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Maintainer thường phản hồi trong vòng 4 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
-
ds-drift
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
we-promise/sure#4266 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
:bank: debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
cucumber/cucumber-ruby-core#346 · 1 bình luận ·