Skip already loaded apps in loadApps

Otherwise you might end up calling a lot of functions unneeded.
And while the individual calls are cheap if you multiply them by 20k
they still get somewhat expensive.

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2020-11-06 14:26:42 +01:00 committed by backportbot[bot]
parent 93211e7ded
commit ef5cee12d1
1 changed files with 3 additions and 3 deletions

View File

@ -94,7 +94,7 @@ class OC_App {
* @return bool * @return bool
*/ */
public static function isAppLoaded(string $app): bool { public static function isAppLoaded(string $app): bool {
return in_array($app, self::$loadedApps, true); return isset(self::$loadedApps[$app]);
} }
/** /**
@ -127,7 +127,7 @@ class OC_App {
// prevent app.php from printing output // prevent app.php from printing output
ob_start(); ob_start();
foreach ($apps as $app) { foreach ($apps as $app) {
if (($types === [] or self::isType($app, $types)) && !in_array($app, self::$loadedApps)) { if (!isset(self::$loadedApps[$app]) && ($types === [] || self::isType($app, $types))) {
self::loadApp($app); self::loadApp($app);
} }
} }
@ -143,7 +143,7 @@ class OC_App {
* @throws Exception * @throws Exception
*/ */
public static function loadApp(string $app) { public static function loadApp(string $app) {
self::$loadedApps[] = $app; self::$loadedApps[$app] = true;
$appPath = self::getAppPath($app); $appPath = self::getAppPath($app);
if ($appPath === false) { if ($appPath === false) {
return; return;