Skip to content

Commit 9cdc63a

Browse files
committed
[Twig] Cache template class resolution
1 parent 33ae8f2 commit 9cdc63a

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/TwigComponent/src/ComponentRenderer.php

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
*/
2525
final class ComponentRenderer implements ComponentRendererInterface
2626
{
27+
private array $templateClasses = [];
28+
2729
public function __construct(
2830
private Environment $twig,
2931
private EventDispatcherInterface $dispatcher,
@@ -62,15 +64,15 @@ public function render(MountedComponent $mounted): string
6264
$variables = $event->getVariables();
6365
// see ComponentNode. When rendering an individual embedded component,
6466
// *not* through its parent, we need to set the parent template.
65-
if ($event->getTemplateIndex()) {
67+
if ($templateIndex = $event->getTemplateIndex()) {
6668
$variables['__parent__'] = $event->getParentTemplateForEmbedded();
6769
}
68-
70+
6971
try {
7072
return $this->twig->loadTemplate(
71-
$this->twig->getTemplateClass($event->getTemplate()),
72-
$event->getTemplate(),
73-
$event->getTemplateIndex(),
73+
$this->templateClasses[$template = $event->getTemplate()] ??= $this->twig->getTemplateClass($template),
74+
$template,
75+
$templateIndex,
7476
)->render($variables);
7577
} finally {
7678
$mounted = $this->componentStack->pop();

0 commit comments

Comments
 (0)