From eb19d8bffe11e261c2cde1d63c785ca7d4d73b27 Mon Sep 17 00:00:00 2001 From: Chris Penny Date: Mon, 2 Oct 2023 09:01:08 +1300 Subject: [PATCH] Processed Updates Service minor performance improvement --- src/Services/CacheProcessingService.php | 6 +++--- src/Services/ProcessedUpdatesService.php | 21 ++++++++++----------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/Services/CacheProcessingService.php b/src/Services/CacheProcessingService.php index 589bc3c..e4f9ea5 100644 --- a/src/Services/CacheProcessingService.php +++ b/src/Services/CacheProcessingService.php @@ -163,13 +163,13 @@ private function alreadyProcessed(string $className, int $id): bool return false; } - // We are in a "Draft" context, so we don't care whether or not the ProcessedUpdateDTO has been published or - // not. Its existence means that it has been processed + // We are in a "Draft" context, so we don't care whether the ProcessedUpdateDTO has been published or not. Its + // existence means that it has been processed if (!$this->shouldPublishUpdates()) { return true; } - // We are in a "Live" context, so we need to return whether or not this ProcessedUpdateDTO has been published + // We are in a "Live" context, so we need to return whether this ProcessedUpdateDTO has been published return $processedUpdate->isPublished(); } diff --git a/src/Services/ProcessedUpdatesService.php b/src/Services/ProcessedUpdatesService.php index 044b10d..407098d 100644 --- a/src/Services/ProcessedUpdatesService.php +++ b/src/Services/ProcessedUpdatesService.php @@ -24,21 +24,15 @@ public function getProcessedUpdates(): array public function addProcessedUpdate(ProcessedUpdateDto $processedUpdate): void { - $this->processedUpdates[] = $processedUpdate; + $key = $this->getProcessedUpdateKey($processedUpdate->getClassName(), $processedUpdate->getId()); + $this->processedUpdates[$key] = $processedUpdate; } public function findProcessedUpdate(string $className, int $id): ?ProcessedUpdateDto { - foreach ($this->processedUpdates as $processedUpdate) { - $classNameMatches = $processedUpdate->getClassName() === $className; - $idMatches = $processedUpdate->getId() === $id; + $key = $this->getProcessedUpdateKey($className, $id); - if ($idMatches && $classNameMatches) { - return $processedUpdate; - } - } - - return null; + return $this->processedUpdates[$key] ?? null; } public function findOrCreateProcessedUpdate(string $className, int $id): ProcessedUpdateDto @@ -50,9 +44,14 @@ public function findOrCreateProcessedUpdate(string $className, int $id): Process } $processedUpdate = new ProcessedUpdateDto($className, $id); - $this->processedUpdates[] = $processedUpdate; + $this->addProcessedUpdate($processedUpdate); return $processedUpdate; } + private function getProcessedUpdateKey(string $className, int $id): string + { + return sprintf('%s-%s', $className, $id); + } + }