diff --git a/core/lib/Drupal/Core/Menu/MenuLinkTree.php b/core/lib/Drupal/Core/Menu/MenuLinkTree.php
index 8d09c2c..0ef03c0 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkTree.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkTree.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Menu;
 
 use Drupal\Component\Utility\NestedArray;
+use Drupal\Core\Cache\Cache;
 use Drupal\Core\Controller\ControllerResolverInterface;
 use Drupal\Core\Routing\RouteProviderInterface;
 
@@ -70,18 +71,40 @@ public function __construct(MenuTreeStorageInterface $tree_storage, MenuLinkMana
    * {@inheritdoc}
    */
   public function getCurrentRouteMenuTreeParameters($menu_name) {
-    $active_trail = $this->menuActiveTrail->getActiveTrailIds($menu_name);
-
-    $parameters = new MenuTreeParameters();
-    $parameters->setActiveTrail($active_trail)
-      // We want links in the active trail to be expanded.
-      ->addExpandedParents($active_trail)
-      // We marked the links in the active trail to be expanded, but we also
-      // want their descendants that have the "expanded" flag enabled to be
-      // expanded.
-      ->addExpandedParents($this->treeStorage->getExpanded($menu_name, $active_trail));
-
-    return $parameters;
+    static $cached_parameters = array();
+
+    $cache_backend = \Drupal::service('cache.menu');
+    $language_manager = \Drupal::service('language_manager');
+    $request_stack = \Drupal::service('request_stack');
+
+    $request = $request_stack->getCurrentRequest();
+    $language_interface = $language_manager->getCurrentLanguage();
+    $system_path = $request->attributes->get('_system_path');
+    $cid = 'current-route-parameters:' . $menu_name . ':page:' . $system_path . ':' . $language_interface->id;
+
+    if (!isset($cached_parameters[$menu_name])) {
+      $cache = $cache_backend->get($cid);
+      if ($cache && $cache->data) {
+        $parameters = $cache->data;
+      }
+      else {
+        $active_trail = $this->menuActiveTrail->getActiveTrailIds($menu_name);
+
+        $parameters = new MenuTreeParameters();
+        $parameters->setActiveTrail($active_trail)
+          // We want links in the active trail to be expanded.
+          ->addExpandedParents($active_trail)
+          // We marked the links in the active trail to be expanded, but we also
+          // want their descendants that have the "expanded" flag enabled to be
+          // expanded.
+          ->addExpandedParents($this->treeStorage->getExpanded($menu_name, $active_trail));
+
+        $cache_backend->set($cid, $parameters, Cache::PERMANENT, array('menu' => $menu_name));
+      }
+      $cached_parameters[$menu_name] = $parameters;
+    }
+
+    return $cached_parameters[$menu_name];
   }
 
   /**
