aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Profile
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-08-18 11:12:04 +0200
committerCarl Schwan <carl@carlschwan.eu>2022-08-18 12:02:16 +0200
commit5edab8c9228db86efbe0f8dd44b7f43c3ed3b34d (patch)
tree922302802e21897c289c674fe62d3d17c973f10d /lib/private/Profile
parent604c1752845df068a7dd5d168abfbfc04065ac3f (diff)
downloadnextcloud-server-5edab8c9228db86efbe0f8dd44b7f43c3ed3b34d.tar.gz
nextcloud-server-5edab8c9228db86efbe0f8dd44b7f43c3ed3b34d.zip
Cache ConfigProfile
Reduce DB query count on homepage from 21 to 13 Signed-off-by: Carl Schwan <carl@carlschwan.eu>
Diffstat (limited to 'lib/private/Profile')
-rw-r--r--lib/private/Profile/ProfileManager.php9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/private/Profile/ProfileManager.php b/lib/private/Profile/ProfileManager.php
index f2eacd1ef25..f038986cf6d 100644
--- a/lib/private/Profile/ProfileManager.php
+++ b/lib/private/Profile/ProfileManager.php
@@ -44,6 +44,7 @@ use OCP\IConfig;
use OCP\IUser;
use OCP\L10N\IFactory;
use OCP\Profile\ILinkAction;
+use OCP\Cache\CappedMemoryCache;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
@@ -81,6 +82,8 @@ class ProfileManager {
/** @var null|ILinkAction[] */
private $sortedActions = null;
+ /** @var CappedMemoryCache<ProfileConfig> */
+ private CappedMemoryCache $configCache;
private const CORE_APP_ID = 'core';
@@ -127,6 +130,7 @@ class ProfileManager {
$this->l10nFactory = $l10nFactory;
$this->logger = $logger;
$this->coordinator = $coordinator;
+ $this->configCache = new CappedMemoryCache();
}
/**
@@ -370,7 +374,10 @@ class ProfileManager {
public function getProfileConfig(IUser $targetUser, ?IUser $visitingUser): array {
$defaultProfileConfig = $this->getDefaultProfileConfig($targetUser, $visitingUser);
try {
- $config = $this->configMapper->get($targetUser->getUID());
+ if (($config = $this->configCache[$targetUser->getUID()]) === null) {
+ $config = $this->configMapper->get($targetUser->getUID());
+ $this->configCache[$targetUser->getUID()] = $config;
+ }
// Merge defaults with the existing config in case the defaults are missing
$config->setConfigArray(array_merge(
$defaultProfileConfig,