2025/02/13分のコミットです。
CHANGELOGへの追加はありませんでした。
Fix typo in Rails routing guide
rails guideのRails Routing from the Outside Inの修正です。
Controller Namespaces and Routingセクション内の説明とexampleコードの内容が一致していない箇所があったのを修正しています。
Optimize String visitor by hand
actionpack/lib/action_dispatch/journey/nodes/node.rb、
actionpack/lib/action_dispatch/journey/visitors.rbの修正です。
journeyのString visitorがsendを多用していたのを、必要なメソッドを個別に定義するよう修正しています。メソッドが定義されていた方がメソッドキャッシュが効き高速になる為。
Stop eagerly computing request.route_uri_pattern
actionpack/lib/action_dispatch/http/request.rb、
actionpack/lib/action_dispatch/journey/router.rbの修正です。
request.route_uri_patternの組み立てを実際に値が必要になるまで遅延させるよう修正しています。request.route_uri_patternは特定のアプリケーション(GitHub)で使う為に導入されたのですが、通常の多くのアプリケーションでは使用していないと思われる、かつ、組み立て処理が重い処理になっている為。
Merge pull request #54503 from etiennebarrie/json-coder-fragment-native
activesupport/lib/active_support/json/encoding.rbの修正です。
jsonに変換する対象がJSON::Fragmentのインスタンスだった場合、as_jsonがJSON::Fragmentのインスタンスをそのまま返せるよう修正しています。
Improve Fragment handling in JSON::Encoding
activesupport/lib/active_support/json/encoding.rbの修正です。
先のJSON::Fragmentのインスタンスを返す処理について、classのチェックを他のclassのチェックと同様に行うよう修正しています。
actionpack/lib/action_dispatch/journey/nodes/node.rbの修正です。
JourneyのNode#to_sの結果をキャッシュするよう修正しています。
Micro-optimize Router#find_routes
actionpack/lib/action_dispatch/journey/router.rbの修正です。
Router#find_routesでeach_with_indexを使用していた箇所をeachを使用するようリファクタリングしています。eachの方が高速な為(YJITが有効な場合特に)、との事です。
Get rid of Jounry::Utils.unescape
actionpack/lib/action_dispatch/journey/router.rb、
actionpack/lib/action_dispatch/journey/router/utils.rbの修正です。
URIのenscape処理に独自メソッド(Journey::Utils.unescape)を使用していたのを、CGI.unescapeURIComponentを使用するよう修正しています。CGI.unescapeURIComponentの方が高速な為。
Micro-optimize Journey normalize_path
actionpack/lib/action_dispatch/journey/router/utils.rbの修正です。
normalize_pathメソッドでpathが正規化する必要ない値の場合、不要な正規化処理を行わないよう修正しています。
Micro optimize route sorting in Router find_routes
actionpack/lib/action_dispatch/journey/router.rbの修正です。
find_routesメソッドでsort_by!を使用していた箇所をsort!を使用するよう修正しています。sort!の方が高速な為。
Skip get_header and set_header for hot methods on Request
actionpack/lib/action_dispatch/http/parameters.rb、
actionpack/lib/action_dispatch/http/request.rbの修正です。
headerの値を取得、設定、削除するのにメソッド(get_header、set_header、delete_header)を使用していたのを、@envを直接操作するよう修正しています。メソッド呼び出し削減の為。