PageRouter::matchRequest could use a cache
Currently, on every request
PageRouter::matchRequest collects all slug candidates and chooses the best candidate. Depending on the amount of records in the database, this may lead to a lot of queries.
For a route that has been resolved previously, the result might get cached for faster resolving. This needs a proper concept in terms of cache invalidation.