1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actionpack/lib/action_dispatch
Theo Julienne c67c764aab actionpack: Improve performance by allowing routes with custom regexes in the FSM.
The FSM used to find matching routes was previously limited to patterns
that contained parameters with the default regexp / no constraints. In
large route sets where many parameters are constrained by custom regexp,
these routes all fall back on a slow linear search over the route list.

These custom regexes were not previously able to be included in the FSM
because it transitioned between nodes using only fragments of the URI,
or path separators [/.?], but a custom regex may cross a path separator
boundary. To work around this, the TransitionTable is improved to
support remembering a point within the matching string that we started,
and continuing to attempt to match from that point up to the end of each
token. Only parameters not on a path separator boundary must still match
with a linear search after this change (e.g. `/foo-:bar/`).

This results in performance for constrainted routes that matches that of
ones using the default regexp.

Benchmark:
https://gist.github.com/theojulienne/e91fc338d180e1710e29c81a5d701fab

Before:
```
Calculating -------------------------------------
    without params      6.466k (±12.7%) i/s -     31.648k in   5.009453s
params without constraints
                        5.867k (±12.9%) i/s -     28.842k in   5.032637s
params with constraints
                      909.661  (± 7.9%) i/s -      4.536k in   5.023534s
```

After:
```
Calculating -------------------------------------
    without params      6.387k (±11.9%) i/s -     31.728k in   5.068939s
params without constraints
                        5.824k (±13.2%) i/s -     28.650k in   5.043701s
params with constraints
                        5.406k (±11.7%) i/s -     26.931k in   5.076412s
```

For github.com which has many constrainted parameters, a random sampling
of 10 URL patterns can be matched approximately 2-4x faster than before.
2021-01-05 08:11:43 +11:00
..
http feat(rubocop): Add Style/RedundantRegexpEscape 2020-12-08 18:57:09 +00:00
journey actionpack: Improve performance by allowing routes with custom regexes in the FSM. 2021-01-05 08:11:43 +11:00
middleware Merge pull request #40960 from abhaynikam/40956-route-table-dark-mode 2020-12-28 23:08:46 -05:00
request avoid calling custom_encoding_for when unused 2020-10-27 10:42:41 -07:00
routing Fix deprecation will be removed version s/Rails 6.1/Rails 6.2/ 2020-10-30 10:11:29 +09:00
system_testing Support selenium-webdriver 4 2020-12-29 02:36:01 +00:00
testing Simply require rather than autoload + immediately load 2020-11-26 21:15:51 +09:00
journey.rb Remove unused journey code 2020-04-25 00:40:37 +09:00
railtie.rb Always ask for a header argument in ResquestId middleware 2020-10-30 00:41:59 +00:00
routing.rb Fix code examples' indentation in ActionDispatch::Routing [ci skip] 2019-02-26 14:04:08 -05:00
system_test_case.rb Load selenium/webdriver only if needed 2020-05-07 15:53:32 +03:00