diff options
author | schneems <richard.schneeman@gmail.com> | 2015-07-24 23:19:15 -0500 |
---|---|---|
committer | schneems <richard.schneeman@gmail.com> | 2015-07-29 20:41:57 -0500 |
commit | 0cbec58ae48279ae5e9fdf6bbdbceb32183215dd (patch) | |
tree | 1bed3550b55f63e39b9575e4ab4fb98b55742968 /actionpack | |
parent | 097ec6fb7c7e1854cdd96113213b555ae7415953 (diff) | |
download | rails-0cbec58ae48279ae5e9fdf6bbdbceb32183215dd.tar.gz rails-0cbec58ae48279ae5e9fdf6bbdbceb32183215dd.tar.bz2 rails-0cbec58ae48279ae5e9fdf6bbdbceb32183215dd.zip |
Decrease route_set allocations
In handle_positional_args `Array#-=` is used which allocates a new array. Instead we can iterate through and delete elements, modifying the array in place.
Also `Array#take` allocates a new array. We can build the same by iterating over the other element.
This change buys us 106,470 bytes of memory and 2,663 fewer objects per request.
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index 42512cad91..43e35366a9 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -267,9 +267,13 @@ module ActionDispatch path_params -= controller_options.keys path_params -= result.keys end - path_params -= inner_options.keys - path_params.take(args.size).each do |param| - result[param] = args.shift + inner_options.each do |key, _| + path_params.delete(key) + end + + args.each_with_index do |arg, index| + param = path_params[index] + result[param] = arg if param end end |