Skip to content
Snippets Groups Projects
Commit 10322daf authored by catch's avatar catch
Browse files

Issue #3414349 by deviantintegral, taraskorpach, alexpott, smustgrave, catch:...

Issue #3414349 by deviantintegral, taraskorpach, alexpott, smustgrave, catch: Improve the performance of \Drupal\Core\Update\UpdateRegistry::getRemovedPostUpdates()
parent f665483c
No related branches found
No related tags found
26 merge requests!8528Issue #3456871 by Tim Bozeman: Support NULL services,!3878Removed unused condition head title for views,!38582585169-10.1.x,!3818Issue #2140179: $entity->original gets stale between updates,!3742Issue #3328429: Create item list field formatter for displaying ordered and unordered lists,!3731Claro: role=button on status report items,!3668Resolve #3347842 "Deprecate the trusted",!3651Issue #3347736: Create new SDC component for Olivero (header-search),!3531Issue #3336994: StringFormatter always displays links to entity even if the user in context does not have access,!3355Issue #3209129: Scrolling problems when adding a block via layout builder,!3226Issue #2987537: Custom menu link entity type should not declare "bundle" entity key,!3154Fixes #2987987 - CSRF token validation broken on routes with optional parameters.,!3133core/modules/system/css/components/hidden.module.css,!2964Issue #2865710 : Dependencies from only one instance of a widget are used in display modes,!2812Issue #3312049: [Followup] Fix Drupal.Commenting.FunctionComment.MissingReturnType returns for NULL,!2378Issue #2875033: Optimize joins and table selection in SQL entity query implementation,!2334Issue #3228209: Add hasRole() method to AccountInterface,!2062Issue #3246454: Add weekly granularity to views date sort,!1105Issue #3025039: New non translatable field on translatable content throws error,!1073issue #3191727: Focus states on mobile second level navigation items fixed,!10223132456: Fix issue where views instances are emptied before an ajax request is complete,!877Issue #2708101: Default value for link text is not saved,!617Issue #3043725: Provide a Entity Handler for user cancelation,!579Issue #2230909: Simple decimals fail to pass validation,!560Move callback classRemove outside of the loop,!555Issue #3202493
Pipeline #88275 passed
Pipeline: drupal

#88278

    ...@@ -67,6 +67,16 @@ class UpdateRegistry implements EventSubscriberInterface { ...@@ -67,6 +67,16 @@ class UpdateRegistry implements EventSubscriberInterface {
    */ */
    protected $sitePath; protected $sitePath;
    /**
    * A static cache of all the extension updates scanned for.
    *
    * This array is keyed by Drupal root, site path, extension name and update
    * type. The value if the extension has been searched for is TRUE.
    *
    * @var array
    */
    protected static array $loadedFiles = [];
    /** /**
    * Constructs a new UpdateRegistry. * Constructs a new UpdateRegistry.
    * *
    ...@@ -185,6 +195,7 @@ protected function loadUpdateFile(Extension $extension) { ...@@ -185,6 +195,7 @@ protected function loadUpdateFile(Extension $extension) {
    if (file_exists($filename)) { if (file_exists($filename)) {
    include_once $filename; include_once $filename;
    } }
    self::$loadedFiles[$this->root][$this->sitePath][$extension->getName()][$this->updateType] = TRUE;
    } }
    /** /**
    ...@@ -247,12 +258,15 @@ public function registerInvokedUpdates(array $function_names) { ...@@ -247,12 +258,15 @@ public function registerInvokedUpdates(array $function_names) {
    */ */
    public function getUpdateFunctions($extension_name) { public function getUpdateFunctions($extension_name) {
    $this->scanExtensionsAndLoadUpdateFiles($extension_name); $this->scanExtensionsAndLoadUpdateFiles($extension_name);
    $all_functions = $this->getAvailableUpdateFunctions();
    return array_filter($all_functions, function ($function_name) use ($extension_name) { $updates = [];
    [$function_extension_name] = explode("_{$this->updateType}_", $function_name); $functions = get_defined_functions();
    return $function_extension_name === $extension_name; foreach (preg_grep('/^' . $extension_name . '_' . $this->updateType . '_/', $functions['user']) as $function) {
    }); $updates[] = $function;
    }
    // Ensure that the update order is deterministic.
    sort($updates);
    return $updates;
    } }
    /** /**
    ...@@ -263,6 +277,10 @@ public function getUpdateFunctions($extension_name) { ...@@ -263,6 +277,10 @@ public function getUpdateFunctions($extension_name) {
    * extension. * extension.
    */ */
    protected function scanExtensionsAndLoadUpdateFiles(string $extension = NULL) { protected function scanExtensionsAndLoadUpdateFiles(string $extension = NULL) {
    if ($extension !== NULL && isset(self::$loadedFiles[$this->root][$this->sitePath][$extension][$this->updateType])) {
    // We've already checked for this file and, if it exists, loaded it.
    return;
    }
    // Scan for extensions. // Scan for extensions.
    $extension_discovery = new ExtensionDiscovery($this->root, TRUE, [], $this->sitePath); $extension_discovery = new ExtensionDiscovery($this->root, TRUE, [], $this->sitePath);
    $module_extensions = $extension_discovery->scan('module'); $module_extensions = $extension_discovery->scan('module');
    ......
    • catch @catch

      mentioned in commit 1c2c5636

      ·

      mentioned in commit 1c2c5636

      Toggle commit list
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment