diff --git a/core/lib/Drupal/Core/Extension/ModuleInstaller.php b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
index 97a3b70..84aacb5 100644
--- a/core/lib/Drupal/Core/Extension/ModuleInstaller.php
+++ b/core/lib/Drupal/Core/Extension/ModuleInstaller.php
@@ -295,7 +295,7 @@ public function install(array $module_list, $enable_dependencies = TRUE) {
 
     // If any modules were newly installed, invoke hook_modules_installed().
     if (!empty($modules_installed)) {
-      \Drupal::service('router.builder')->rebuild();
+      \Drupal::service('router.builder')->setRebuildNeeded();
       $this->moduleHandler->invokeAll('modules_installed', array($modules_installed));
     }
 
@@ -376,9 +376,6 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) {
         }
       }
 
-      // @todo: make this a method on the RouteBuilder.
-      \Drupal::service('cache.default')->delete('routebuilder:yml:' . $module);
-
       // Allow modules to react prior to the uninstallation of a module.
       $this->moduleHandler->invokeAll('module_preuninstall', array($module));
 
@@ -440,7 +437,7 @@ public function uninstall(array $module_list, $uninstall_dependents = TRUE) {
       $schema_store = \Drupal::keyValue('system.schema');
       $schema_store->delete($module);
     }
-    \Drupal::service('router.builder')->rebuild();
+    \Drupal::service('router.builder')->setRebuildNeeded();
     drupal_get_installed_schema_version(NULL, TRUE);
 
     // Let other modules react.
diff --git a/core/lib/Drupal/Core/Routing/RouteBuilder.php b/core/lib/Drupal/Core/Routing/RouteBuilder.php
index a400927..39203db 100644
--- a/core/lib/Drupal/Core/Routing/RouteBuilder.php
+++ b/core/lib/Drupal/Core/Routing/RouteBuilder.php
@@ -148,8 +148,10 @@ public function rebuild() {
     $this->building = TRUE;
 
     $collection = new RouteCollection();
-    $this->routeCollection = $collection;
-    foreach ($this->getRouteDefinitions() as $routes) {
+
+    $module_dirs = $this->moduleHandler->getModuleDirectories();
+   $this->yamlDiscovery = new YamlDiscovery('routing', $module_dirs);
+    foreach ($this->yamlDiscovery->findAll() as $routes) {
       // The top-level 'routes_callback' is a list of methods in controller
       // syntax, see \Drupal\Core\Controller\ControllerResolver. These methods
       // should return a set of \Symfony\Component\Routing\Route objects, either
@@ -222,46 +224,6 @@ public function rebuildIfNeeded() {
   }
 
   /**
-   * Retrieves all defined routes from .routing.yml files.
-   *
-   * @return array
-   *   The defined routes, keyed by provider.
-   */
-  protected function getRouteDefinitions() {
-    $route_definitions = [];
-    $cache_ids = [];
-    $module_cache_id_map = [];
-
-    $module_dirs = $this->moduleHandler->getModuleDirectories();
-    foreach ($module_dirs as $module => $dir) {
-      $cache_ids[] = 'routebuilder:yml:' . $module;
-      $module_cache_id_map['routebuilder:yml:' . $module] = $module;
-    }
-    foreach ($this->cache->getMultiple($cache_ids) as $cache) {
-      if ($cache->data) {
-        $route_definitions[$module_cache_id_map[$cache->cid]] = $cache->data;
-      }
-      unset($module_dirs[$module_cache_id_map[$cache->cid]]);
-    }
-    if ($module_dirs) {
-      if (!isset($this->yamlDiscovery)) {
-        $this->yamlDiscovery = new YamlDiscovery('routing', $module_dirs);
-      }
-      foreach ($this->yamlDiscovery->findAll() as $module => $routes) {
-        $route_definitions[$module] = $routes;
-        $this->cache->set('routebuilder:yml:' . $module, $routes);
-        unset($module_dirs[$module]);
-      }
-      // Cache the fact that this module has no routing yml to parse.
-      foreach ($module_dirs as $module) {
-        $routes = [];
-        $this->cache->set('routebuilder:yml:' . $module, $routes);
-      }
-    }
-    return $route_definitions;
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function destruct() {
diff --git a/core/modules/views/src/Tests/Plugin/DisabledDisplayTest.php b/core/modules/views/src/Tests/Plugin/DisabledDisplayTest.php
index 4cfce8c..b4ad910 100644
--- a/core/modules/views/src/Tests/Plugin/DisabledDisplayTest.php
+++ b/core/modules/views/src/Tests/Plugin/DisabledDisplayTest.php
@@ -73,6 +73,8 @@ public function testDisabledDisplays() {
       $this->assertTrue($enabled, 'Display ' . $display_id . ' is now enabled');
     }
 
+    \Drupal::service('router.builder')->rebuild();
+
     // Check that the originally disabled page_2 display is now enabled.
     $this->drupalGet('test-disabled-display-2');
     $result = $this->xpath('//h1');
@@ -86,6 +88,8 @@ public function testDisabledDisplays() {
       $this->assertFalse($enabled, 'Display ' . $display_id . ' is now disabled');
     }
 
+    \Drupal::service('router.builder')->rebuild();
+
     // Check that the page_1 display still works.
     $this->drupalGet('test-disabled-display');
     $this->assertResponse(200);
diff --git a/core/modules/views/src/Tests/ViewTestData.php b/core/modules/views/src/Tests/ViewTestData.php
index 03c4bae..4b5340e 100644
--- a/core/modules/views/src/Tests/ViewTestData.php
+++ b/core/modules/views/src/Tests/ViewTestData.php
@@ -56,6 +56,9 @@ public static function createTestViews($class, array $modules) {
         }
       }
     }
+
+    // Rebuild the router once.
+    \Drupal::service('router.builder')->rebuild();
   }
 
   /**
