diff --git a/CHANGELOG.md b/CHANGELOG.md index 803dde9..b029c14 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * perf: Add caching for `TransformerRegistry`. * perf: Optimize `guessTypeFromVariable` * perf: Optimize `Context` & `ObjectCache` +* perf: Change 'simpletypes' cache to array. ## 0.5.14 diff --git a/src/TypeResolver/CachingTypeResolver.php b/src/TypeResolver/CachingTypeResolver.php index 7a82bbb..5240da0 100644 --- a/src/TypeResolver/CachingTypeResolver.php +++ b/src/TypeResolver/CachingTypeResolver.php @@ -24,9 +24,6 @@ public function __construct( /** @psalm-suppress PropertyTypeCoercion */ $this->typeStringCache = new \WeakMap(); - /** @psalm-suppress PropertyTypeCoercion */ - $this->simpleTypesCache = new \WeakMap(); - /** @psalm-suppress PropertyTypeCoercion */ $this->isSimpleTypeCache = new \WeakMap(); } @@ -60,9 +57,9 @@ public function getTypeString(Type|MixedType $type): string // can be expensive in a loop. we cache using a weakmap /** - * @var \WeakMap> + * @var array> */ - private \WeakMap $simpleTypesCache; + private array $simpleTypesCache = []; public function getSimpleTypes(Type|MixedType $type): array { @@ -70,13 +67,15 @@ public function getSimpleTypes(Type|MixedType $type): array return [$type]; } - if ($result = $this->simpleTypesCache[$type] ?? null) { + $key = md5(serialize($type)); + + if ($result = $this->simpleTypesCache[$key] ?? null) { return $result; } $simpleTypes = $this->decorated->getSimpleTypes($type); - $this->simpleTypesCache->offsetSet($type, $simpleTypes); + $this->simpleTypesCache[$key] = $simpleTypes; return $simpleTypes; }