Problem/Motivation
This is a follow-up issue to #1578832: <front> menu links are missing active trail classes.
Fixing the other issue introduced a performance penalty for the front page because an extra query had to be run in the menu system to check for link items matching <front>
. This could be avoided if we had the ability to load menu links for multiple route names instead of just one at a time. Per @larowlan:
I don't think we can avoid the extra queries because we only have \Drupal\Core\Menu\MenuLinkManager::loadLinksByRoute and \Drupal\Core\Menu\MenuTreeStorageInterface::loadByRoute but I think it would be worth adding loadLinksByRoutes and loadByRoutes methods to both those services to support doing this in a single query.
@catch agreed that this task could be done in a follow-up issue.
Proposed resolution
- Add
\Drupal\Core\Menu\MenuLinkManager::loadLinksByRoutes
. - Add
\Drupal\Core\Menu\MenuTreeStorageInterface::loadByRoutes
. - Update
\Drupal\Core\Menu\MenuActiveTrail::getActiveLink()
to use loadLinksByRoutes() for better performance.
Remaining tasks
User interface changes
Introduced terminology
API changes
Two new functions, one in MenuLinkManager
and another in MenuTreeStorageInterface
.