Parte 1 de 3 desta série sobre camada de view no Laravel. Aqui: Blade. Nas próximas: Livewire e Inertia.
"Blade? Isso ainda se usa?"
Você abre um projeto novo, o dev júnior olha por cima do ombro, vê um .blade.php e solta: "ué, não vai usar React?".
Como se renderizar HTML no servidor fosse uma vergonha. Como se, em 2026, com tanto framework JS reluzente, quem usa Blade estivesse preso em 2015.
Então deixa eu fazer a pergunta de volta, sem medo: você realmente precisa de uma SPA com 300kb de JavaScript pra mostrar uma listagem de produtos e um formulário? Porque na maioria dos projetos, a resposta honesta é não.
O "problema" do Blade é que ele é chato de tão simples
O Blade não impressiona ninguém no papel. Ele pega variável e cospe HTML:
<ul>
@foreach ($produtos as $produto)
<li>{{ $produto->nome }} — R$ {{ $produto->preco }}</li>
@endforeach
</ul>
Sem build step. Sem node_modules de 400MB. Sem hidratação, sem estado no cliente, sem "por que meu componente re-renderizou 4 vezes". Você escreve, dá F5, tá na tela.
E é exatamente por ser "chato" que ele é tão produtivo. Pra um site de conteúdo, um painel administrativo, um MVP que precisa ir pro ar semana que vem — o Blade te entrega em uma tarde o que uma SPA te faz configurar por dois dias.
A curiosidade que quase ninguém sabe: o Blade não existe em runtime
Aqui está o detalhe que faz cair a ficha.
Muita gente acha que o Blade é "interpretado" a cada request — que aquele @foreach é lido, parseado e traduzido toda vez que alguém abre a página. Não é.
O Blade compila pra PHP puro e guarda o resultado em cache no disco, lá em storage/framework/views. Aquele {{ $produto->nome }} bonitinho vira, no arquivo compilado, algo tipo:
<?php echo e($produto->nome); ?>
Ou seja: na hora que a página realmente roda, o "Blade" já foi embora. O que executa é PHP cru, sem overhead nenhum de template engine. Blade não é lento — ele nem está lá quando o request chega.
E de brinde, repara no e(): todo {{ }} passa automático pelo htmlspecialchars do PHP. Isso quer dizer que o Blade te protege de XSS por padrão — você teria que sair do caminho (usar {!! !!}) pra criar o buraco. Segurança de graça, sem você pedir.
Onde o Blade brilha (e onde ele te trava)
Brilha:
- Sites com conteúdo e SEO — HTML pronto no servidor, Google adora.
- Painéis administrativos e CRUDs internos.
- MVPs e protótipos que precisam ficar de pé rápido.
- Qualquer página onde "interatividade" é formulário + link.
Te trava:
- Quando a tela precisa reagir sem recarregar: filtro que atualiza na hora, drag-and-drop, chat, notificação em tempo real.
E é aqui que mora a confusão que gera briga na internet: as pessoas acham que a escolha é "Blade ou React". Não é. Na real, o Blade combinado com um pouquinho de Alpine.js resolve 80% da "interatividade" que a galera acha que precisa de SPA.
Os outros 20%? Aí sim entram os pesos-pesados — e é sobre eles as próximas duas partes.
Pegadinha: abandonar o Blade cedo demais custa caro
O erro clássico não é usar Blade. É não usar quando ele resolveria, e partir pra uma stack JS completa por status, não por necessidade.
Aí você troca "uma view de 20 linhas" por um front-end separado, com build, com estado, com rota própria, com API pra alimentar — pra mostrar, no fim, a mesma tabela que o Blade cuspiria em três minutos.
A régua honesta é: comece pelo Blade e só suba de camada quando a dor aparecer de verdade. Interatividade rica é um problema real — mas é um problema que você resolve quando ele chega, não por antecipação.
Antes de você fechar a aba
Me responde sincero: quantas telas do seu último projeto "SPA" eram, no fundo, um formulário e uma tabela que o Blade entregaria numa tarde?
Cai nos comentários e me conta. E se curtiu, segue firme — na parte 2 eu pego o Livewire e faço a pergunta que divide a comunidade ao meio: gambiarra genial ou bomba-relógio de performance? 👀
Top comments (0)