跳至正文

性能与缓存

该库需要解析大量信息才能处理所有提供的功能。因此,强烈建议激活缓存以减少运行时之间的繁重工作负载,特别是当应用程序在生产环境中运行时。

该库提供了开箱即用的缓存实现,它将缓存条目保存到文件系统中。

当应用程序在开发环境中运行时,缓存实现应使用FileWatchingCache进行修饰,它将监视应用程序的文件,并在开发人员修改 PHP 文件时使缓存条目失效,从而防止库在属性或方法的签名更改时无法按预期运行。

映射器构建器和规范化器构建器可以使用相同的缓存实例。

$cache = new \CuyZ\Valinor\Cache\FileSystemCache('path/to/cache-directory');

if ($isApplicationInDevelopmentEnvironment) {
    $cache = new \CuyZ\Valinor\Cache\FileWatchingCache($cache);
}

(new \CuyZ\Valinor\MapperBuilder())
    ->withCache($cache)
    ->mapper()
    ->map(SomeClass::class, [/* … */]);

(new \CuyZ\Valinor\NormalizerBuilder())
    ->withCache($cache)
    ->normalizer(\CuyZ\Valinor\Normalizer\Format::json())
    ->normalize($someData);

预热缓存

缓存可以被预热,例如在应用程序的构建和部署期间在管道中。

注意

必须先注册缓存,否则预热将毫无用处。

$cache = new \CuyZ\Valinor\Cache\FileSystemCache('path/to/cache-dir');

$mapperBuilder = (new \CuyZ\Valinor\MapperBuilder())->withCache($cache);

// During the build:
$mapperBuilder->warmupCacheFor(SomeClass::class, SomeOtherClass::class);

// In the application:
$mapperBuilder->mapper()->map(SomeClass::class, [/* … */]);