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:
render partial:dentro de um laço gera uma linhaRendering: _post_rowpor item, uma parede na árvore do profiler;render collection:resolve tudo em uma linha só.
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).