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;
  }
}
 
Ihre aktuelle Seitenauswahl:  
>>>