Blog do Alan
voltar

Laboratório Rack Mini Profiler · #02

Render de view: render no loop vs collection

No primeiro vídeo a gente contou consultas ao banco (o problema de query N+1). Neste segundo o foco é outra camada: a renderização da view. A mesma lista de posts é montada de dois jeitos, e o painel do rack-mini-profiler mostra a diferença.

As consultas ao banco são praticamente iguais nos dois lados, e o que muda é o render:

Mesmo HTML, mesma lista, mesmo banco. A diferença é uma linha de código, e o painel prova qual.

Todo o código está no repositório rmp-lab, um app Rails lento de propósito: dá para clonar, rodar e ver o mesmo painel do vídeo.

O que o vídeo cobre

Como ler a árvore do profiler além do banco (a camada de view): por que o laço gera uma linha de render por item, a correção com render collection, e a leitura dos logs em tempo real separando o tempo de view do tempo de banco.

Referências dos eventos

Cada caminho de render dispara um evento de instrumentação diferente, o que explica a parede de linhas de um lado e a linha única do outro: render_partial.action_view (um por item, no laço) e render_collection.action_view (um só, na coleção).