Skip to content

[Improvement][Perf]: make ClassTypeDefinitions lazy and/or cached #885

Description

@dkarlovi

Improvement description

Currently, \Pimcore\Bundle\DataHubBundle\GraphQL\ClassTypeDefinitions::build is creating type instances for all classes on every request

public static function build(Service $graphQlService, $context = [])
{
$db = Db::get();
$listing = $db->fetchAllAssociative('SELECT id, name FROM classes');
foreach ($listing as $class) {
$id = $class['id'];
$name = $class['name'];
$objectType = new PimcoreObjectType($graphQlService, $name, $id, [], $context);
self::$definitions[$name] = $objectType;
}
/**
* @var string $name
* @var PimcoreObjectType $definition
*/
foreach (self::$definitions as $name => $definition) {
$definition->build($context);
}
}

but not all classes will be used. It would make sense to convert this to a lazy loaded version where the instance is only created when get() is called.

This build process is almost 40% of the runtime in trivial GraphQL queries.

Untitled-profile-Blackfire

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    Affected capability

    None yet

    Platform Version

    None yet

    Galaxy

    None yet

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions