Onde renderizar? Pré-processo ou modelo?

8

Estamos constantemente aprimorando nosso desempenho de codificação e monitorando cada carregamento de página para otimizar os tempos de renderização e renderização em nossos sites.
Acima da afirmação em mente, me deparei com a questão de onde devemos renderizar as matrizes renderizáveis?

Se você renderizá-los em seu pré-processador, o modelo permanecerá bem organizado, pois você está apenas imprimindo variáveis.

Pré-processador:

function template_preprocess_node__faq(&$variables) {
    $node = node_load($variables['nid']);
    $node_style = node_view($node, $variables['view_mode']);

    $faq_sets = array(
      '#theme'  => 'my_module_faq_set',
      '#sets'   => $variables['field_faq_set'],
    );

    $variables['faq_image']   = render($node_style['field_faq_image']);
}

Modelo:

<div class="faq_image">
     <?php print $faq_image; ?>
</div>

No entanto, não tenho certeza se essa é a maneira adequada / mais rápida / mais limpa de pré-processar e imprimir variáveis.

Drupal também não está consistindo nesse assunto ... As node.tpl.phpvariáveis padrão são renderizadas enquanto em outros modelos padrão (como html.php.php), as variáveis ​​são apenas impressas.

Alguém tem uma regra e / ou algumas dicas e conselhos sobre como lidar com esse problema da maneira mais limpa e rápida?

Michiel
fonte
2
Esta questão é bastante subjetiva. A regra geral é que a computação é feita na função de pré-processo e a renderização no arquivo de modelo. Não está claro por que você está usando node_view()para renderizar um campo; Os campos não são renderizados dessa maneira em um modelo de nó.
kiamlaluno
Obrigado pela informação. Então, por que o Drupal está processando node.tpl.phpe imprimindo html.tpl.php? Como você resolveria o node_view()problema?
28915 Michiel

Respostas:

7

Drupal também não está consistindo nesse assunto ... No padrão node.tpl.php, as variáveis ​​são renderizadas, enquanto em outros modelos padrão (como html.php.php), as variáveis ​​são impressas.

Isto não está completamente correto. Se você olhar, template_preprocess_html()verá que nada é executado através de render()/ drupal_render(). Então, simplesmente as variáveis ​​em html.tpl.php são impressas, e não renderizadas, porque não precisam ser renderizadas. Todos os vars já são cadeias de caracteres e nenhuma matriz de renderização foi usada para criar o modelo.

Por outro lado, o conteúdo do nó em node.tpl.php é uma matriz de renderização. Portanto, todas as partes que precisam ser renderizadas precisam ser processadas render()e não apenas impressas.

Eu ficaria tentado a seguir o exemplo principal do uso render()em modelos, não nas funções de pré-processo, a menos que você tenha um motivo específico para fazer isso de maneira diferente.

Do ponto de vista do desempenho, a diferença certamente seria insignificante, mas criar um perfil do código no contexto do site e do hardware é a única maneira de ter certeza.

Clive
fonte