Task #90143
openRedirects: Poor performance of redirect matching for large redirects table
0%
Description
Problem description¶
The current redirect matching retrieves all redirects from the database table and stores it in an internal cache.
This is then fetched and filtered for the route that matches the request.
- https://github.com/TYPO3-CMS/redirects/blob/master/Classes/Service/RedirectService.php
- https://github.com/TYPO3-CMS/redirects/blob/master/Classes/Service/RedirectCacheService.php
With a large redirects table this takes a pretty long time.
I created 350.000 unique redirects and it took the page about 5 seconds to redirect to the target page.
Before you say "350.000 will never be reached": On a long term a heavily edited website might reach that number at some point in time (assuming this feature will continue to exist with further TYPO3 versions).
Suggested solution¶
I suggest that the redirect matching is mainly done via the database query.
Most of the logic can be moved into a WHERE clause. Operations which are not available via database operations would then be applied to the remaining records.
With that the above 5 seconds of loading time could be reduced to merely 1 second.
This might also imply that the redirect cache via RedirectCacheService is not needed anymore.
Databases already come with caching mechanisms, as to such I fail to understand why a PHP cache is also needed.
This is a perfomance improvement which should be applied to TYPO3 9.5 as well.
Files