[BUGFIX] Don’t do greedy merges in extension scanner 02/58302/2
authorAndreas Fernandez <a.fernandez@scripting-base.de>
Mon, 17 Sep 2018 11:04:55 +0000 (13:04 +0200)
committerSusanne Moog <susanne.moog@typo3.org>
Tue, 18 Sep 2018 07:22:33 +0000 (09:22 +0200)
The extension scanner merges all matches into an array. This is done in a
loop, which is pretty greedy as it impacts CPU and RAM.

Instead, it's possible to do a single array_merge() at the end of the
loop.

See this document for reference:
https://github.com/kalessil/phpinspectionsea/blob/master/docs/performance.md#slow-array-function-used-in-loop

Resolves: #86282
Releases: master
Change-Id: I09b45468dfd9f60ce6bd9e264ecfc3cbfcb54fa1
Reviewed-on: https://review.typo3.org/58302
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
typo3/sysext/install/Classes/Controller/UpgradeController.php

index 78fd13c..feb3021 100644 (file)
@@ -630,11 +630,12 @@ class UpgradeController extends AbstractController
         $traverser->traverse($statements);
 
         // Gather code matches
-        $matches = [];
+        $matches = [[]];
         foreach ($matchers as $matcher) {
             /** @var \TYPO3\CMS\Install\ExtensionScanner\CodeScannerInterface $matcher */
-            $matches = array_merge($matches, $matcher->getMatches());
+            $matches[] = $matcher->getMatches();
         }
+        $matches = array_merge(...$matches);
 
         // Prepare match output
         $restFilesBasePath = ExtensionManagementUtility::extPath('core') . 'Documentation/Changelog';