なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2015/09/12)

2015/09/12分のコミットです。

CHANGELOGへの追加はありませんでした。


Improve String#strip_heredoc

activesupport/lib/active_support/core_ext/string/strip.rbの修正です。

String#strip_heredocメソッドの性能改善を行っています。

-    indent = scan(/^[ \t]*(?=\S)/).min.try(:size) || 0
-    gsub(/^[ \t]{#{indent}}/, '')
+    gsub(/^#{scan(/^[ \t]*(?=\S)/).min}/, ''.freeze)

indetを変数に入れずに、直接scanの結果をgsubするようにしたんですねえ。

性能改善の結果は下記の通りです。

require "benchmark/ips"
require_relative "./strip_heredoc"
require_relative "./patched_strip_heredoc"

def original
  <<-MSG.strip_heredoc
    xhr and xml_http_request methods are deprecated in favor of
    `get :index, xhr: true` and `post :create, xhr: true`
  MSG
end

def patched
  <<-MSG.patched_strip_heredoc
    xhr and xml_http_request methods are deprecated in favor of
    `get :index, xhr: true` and `post :create, xhr: true`
  MSG
end

Benchmark.ips do |x|
  x.report("original") { original }
  x.report(" patched") { patched  }
  x.compare!
end
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
Calculating -------------------------------------
            original     5.652k i/100ms
             patched     6.477k i/100ms
-------------------------------------------------
            original     54.076k (± 5.7%) i/s -    271.296k
             patched     74.557k (± 6.2%) i/s -    375.666k

Comparison:
             patched:    74557.0 i/s
            original:    54076.4 i/s - 1.38x slower