aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJulius Knorr <jus@bitgrid.net>2025-04-11 16:05:14 +0200
committerJulius Knorr <jus@bitgrid.net>2025-04-11 16:05:14 +0200
commitc6697cb001551e30e2ff5f1e90431fbab16d7cfc (patch)
tree78908ed5ad62579f086a2d212fec6de8ef0272e0
parent9e0e53707f02c455bb5998130d0556ade7ca298f (diff)
downloadnextcloud-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.php25
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);
}
}