diff options
author | Julius Knorr <jus@bitgrid.net> | 2025-04-11 16:05:14 +0200 |
---|---|---|
committer | Julius Knorr <jus@bitgrid.net> | 2025-04-11 16:05:14 +0200 |
commit | c6697cb001551e30e2ff5f1e90431fbab16d7cfc (patch) | |
tree | 78908ed5ad62579f086a2d212fec6de8ef0272e0 | |
parent | 9e0e53707f02c455bb5998130d0556ade7ca298f (diff) | |
download | nextcloud-server-perf/cache-reference-list.tar.gz nextcloud-server-perf/cache-reference-list.zip |
perf: Cache reference providers on page loadsperf/cache-reference-list
Signed-off-by: Julius Knorr <jus@bitgrid.net>
-rw-r--r-- | lib/private/Collaboration/Reference/RenderReferenceEventListener.php | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/lib/private/Collaboration/Reference/RenderReferenceEventListener.php b/lib/private/Collaboration/Reference/RenderReferenceEventListener.php index 9e6192314cb..52ca3c66f2a 100644 --- a/lib/private/Collaboration/Reference/RenderReferenceEventListener.php +++ b/lib/private/Collaboration/Reference/RenderReferenceEventListener.php @@ -15,12 +15,13 @@ use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventListener; use OCP\IInitialStateService; - +use OCP\ICacheFactory; /** @template-implements IEventListener<Event|RenderReferenceEvent> */ class RenderReferenceEventListener implements IEventListener { public function __construct( private IReferenceManager $manager, private IInitialStateService $initialStateService, + private ICacheFactory $cacheFactory, ) { } @@ -36,13 +37,23 @@ class RenderReferenceEventListener implements IEventListener { return; } - $providers = $this->manager->getDiscoverableProviders(); - $jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) { - return $provider->jsonSerialize(); - }, $providers); - $this->initialStateService->provideInitialState('core', 'reference-provider-list', $jsonProviders); + $cache = $this->cacheFactory->createLocal('reference-provider-list'); + + $jsonProviders = $cache->get('providers'); + $timestamps = $cache->get('timestamps'); + + if ($jsonProviders === null || $timestamps === null) { + $providers = $this->manager->getDiscoverableProviders(); + $jsonProviders = array_map(static function (IDiscoverableReferenceProvider $provider) { + return $provider->jsonSerialize(); + }, $providers); + $cache->set('providers', $jsonProviders, 24 * 3600); - $timestamps = $this->manager->getUserProviderTimestamps(); + $timestamps = $this->manager->getUserProviderTimestamps(); + $cache->set('timestamps', $timestamps, 24 * 3600); + } + + $this->initialStateService->provideInitialState('core', 'reference-provider-list', $jsonProviders); $this->initialStateService->provideInitialState('core', 'reference-provider-timestamps', $timestamps); } } |