diff -u b/core/modules/system/system.module b/core/modules/system/system.module --- b/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -854,13 +854,25 @@ function system_get_info($type, $name = NULL) { $info = array(); if ($type == 'module') { - if (!$data = \Drupal::state()->get('system.module.data')) { - $data = system_rebuild_module_data(); + static $drupal_static_fast; + if (!isset($drupal_static_fast)) { + $drupal_static_fast['info'] = &drupal_static(__FUNCTION__ . ':module'); } - foreach (\Drupal::moduleHandler()->getModuleList() as $module => $filename) { - if (isset($data[$module])) { - $info[$module] = $data[$module]->info; + $info = &$drupal_static_fast['info']; + if (!isset($info)) { + if ($cache = \Drupal::cache()->get('system.module.info')) { + $info = $cache->data; } + elseif (!isset($info)) { + $data = system_rebuild_module_data(); + foreach (\Drupal::moduleHandler()->getModuleList() as $module => $filename) { + if (isset($data[$module])) { + $info[$module] = $data[$module]->info; + } + } + \Drupal::cache()->set('system.module.info', $info); + } + return $info; } } else { @@ -999,16 +1011,18 @@ $files[$name] = $module->getPathname(); } $modules = \Drupal::moduleHandler()->buildModuleDependencies($modules); - // Store the module info in state. We rely on consecutive calls to + // Store the module info in cache. We rely on consecutive calls to // system_rebuild_module_data() to reset this key, such as when // listing modules, (un)installating modules, importing configuration, // updating the site and when flushing all caches. - \Drupal::state()->set('system.module.data', $modules); $modules_cache = $modules; // Store filenames to allow drupal_get_filename() to // retrieve them without having to rebuild or scan the filesystem. \Drupal::state()->set('system.module.files', $files); + // Clear module info cache. + \Drupal::cache()->delete('system.module.info'); + drupal_static_reset('system_get_info:module'); } return $modules_cache; } only in patch2: unchanged: --- a/core/modules/user/src/PermissionHandler.php +++ b/core/modules/user/src/PermissionHandler.php @@ -227,9 +227,8 @@ protected function sortPermissions(array $all_permissions = array()) { */ protected function getModuleNames() { $modules = array(); - $module_info = $this->systemRebuildModuleData(); foreach (array_keys($this->moduleHandler->getModuleList()) as $module) { - $modules[$module] = $module_info[$module]->info['name']; + $modules[$module] = $this->moduleHandler->getName($module); } asort($modules); return $modules;