wenn man einen Viewhelper öfters benutzt (zb. in einer Schleife) dann kann man die Seitenegenerierung optimieren (Geschwindigkeit und Speicherverbrauch) wenn man den Viewhelper 'compilable' macht.
dazu muss nicht viel verändert werden.
vorher:
<?php namespace VENDOR/MyExtension/Viewhelpers; use \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; class FormatViewHelper extends AbstractViewHelper { public function render($var1 == NULL, $var2 == NULL) if( $var1 === NULL ) { $var1 = $this->renderChildren(); } /* do something with $var1 and $var2, resulting in $retval */ return $retval; } }
nachher:
<?php namespace VENDOR/MyExtension/Viewhelpers; use \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; use \TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface; use \TYPO3\CMS\Fluid\Core\Rendering\RenderingContextInterface; class FormatViewHelper extends AbstractViewHelper implements CompilableInterface { public function render($var1 == NULL, $var2 == NULL) return static::renderStatic( array( 'var1' => $var1 , 'var2' => $var2 ) , $this->buildRenderChildrenClosure() , $this->renderingContext ); } static public function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) { $var1 = $arguments['var1']; $var2 = $arguments['var2']; if( $var1 === NULL ) { $var1 = $renderChildrenClosure(); } /* do something with $var1 and $var2, resulting in $retval */ return $retval; } }