週刊Railsウォッチ(20180918)ビューテンプレート探索が高速化、mini_scheduler gem、レガシコントローラのリファクタリングほか

こんにちは、hachi8833です。先日の大江戸Ruby会議 07の白眉は、Rubyのキーワード引数分離についての議論↓と、Aaron PattersonさんのAsakusa.rb 10周年のお祝いメッセージが特濃だった(tenderlove/allocation_sampler)ところでした。Asakusa.rb10周年おめでとうございます!🎉🎉 @yukihiro_matz ruby-dev各位、今日のキーワード引数分離の課題をまとめた資料です。ご査収ください。https://t.co/zlolBwLs3Y 追って英語化します。 — Yusuke Endoh (@mametter) September 13, 2018 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを社内有志でつっついたときの会話です👄 今回のエントリは少なめです🙇。 ⚓Rails: 先週の改修(Rails公式ニュースより) つっつき時点では公式の更新情報がなかったのでコミットログなどから見繕いました。 ⚓ビューテンプレート探索を高速化 PR: Use faster globs for template resolving by jhawthorn · Pull Request #33860 · rails/rails かなり速くなったようです。 # actionview/lib/action_view/template/resolver.rb#L368 – exts = EXTENSIONS.map do |ext, prefix| – if ext == :variants && details[ext] == :any – “{#{prefix}*,}” – else – “{#{details[ext].compact.uniq.map { |e| “#{prefix}#{e},” }.join}}” + def find_template_paths_from_details(path, details) + # 可能なパスをすべてチェックするのではなく、他のglobと同様、正しいprefixを持つファイルを検索する + query = “#{escape_entry(File.join(@path, path))}*” + regex = build_regex(path, details) + Dir[query].uniq.reject do |filename| + # この正規表現は、(prefix以外にも)詳細部分にもマッチするファイルの探索と、 + # 大文字小文字を区別しないファイルシステム向けのフィルタという2つの役割を担う + !filename.match(regex) || + File.directory?(filename) + end.sort_by do |filename| + # ファイルを1つずつチェックするのではなくディレクトリを探索しているので、 + # そのままでは戻り値の順序が一定しない + # この正規表現でのマッチ結果を用いて詳細部分をインデックスでソートする + match = filename.match(regex) + EXTENSIONS.keys.reverse.map do |ext| + if ext == :variants && details[ext] == :any + match[ext].nil? ? 0 : 1 + elsif match[ext].nil? + # No match should be last + details[ext].length + else + found = match[ext].to_sym + details[ext].index(found) + end + end + end – end.join + end # 修正前 Warming up ————————————– lookup users/show 6.000 i/100ms Calculating ————————————- lookup users/show 61.302 (± 4.9%) … Continue reading 週刊Railsウォッチ(20180918)ビューテンプレート探索が高速化、mini_scheduler gem、レガシコントローラのリファクタリングほか