mirror of
https://github.com/nextcloud/server.git
synced 2026-06-11 09:42:09 -04:00
perf: Cache reference providers on page loads
Signed-off-by: Julius Knorr <jus@bitgrid.net>
This commit is contained in:
parent
9e0e53707f
commit
c6697cb001
1 changed files with 18 additions and 7 deletions
|
|
@ -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');
|
||||
|
||||
$timestamps = $this->manager->getUserProviderTimestamps();
|
||||
$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();
|
||||
$cache->set('timestamps', $timestamps, 24 * 3600);
|
||||
}
|
||||
|
||||
$this->initialStateService->provideInitialState('core', 'reference-provider-list', $jsonProviders);
|
||||
$this->initialStateService->provideInitialState('core', 'reference-provider-timestamps', $timestamps);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue