Pular para o conteudo principal

O Custo Real de JavaScript no Frontend

Como sair da conversa rasa sobre tamanho de bundle e enxergar o custo completo de baixar, parsear, executar e disputar a thread principal.

Andrews Ribeiro

Andrews Ribeiro

Founder & Engineer

Trilha

Trilha para entrevistas de senior frontend

Etapa 11 / 15

O problema

Muita conversa sobre performance de frontend para cedo demais no bundle size.

Ai a analise fica assim:

  • arquivo grande e ruim
  • arquivo pequeno e bom

Isso ajuda um pouco.

Mas ainda e incompleto.

Porque JavaScript não termina de custar quando o download acaba.

Modelo mental

Pense no custo de JavaScript em pelo menos cinco etapas:

  1. baixar
  2. parsear
  3. compilar
  4. executar
  5. competir com o resto do trabalho do browser

Esse “resto do trabalho” inclui:

  • input
  • layout
  • paint
  • hydration
  • outras tasks e microtasks

Por isso uma pagina pode:

  • aparecer
  • parecer pronta
  • e ainda assim responder mal ao clique

Quebrando o problema

Rede e só o começo

Se o arquivo e grande, claro que o download pesa.

Mas em muita maquina real o custo forte continua depois:

  • o browser precisa entender o código
  • preparar o que vai rodar
  • executar o trabalho

Em dispositivo mais fraco, esse custo fica ainda mais visível.

Execução disputa a thread principal

No frontend, JavaScript normalmente compartilha a thread principal com coisas importantes da experiência:

  • responder evento
  • calcular layout
  • pintar a tela

Se o script ocupa tempo demais, o usuário sente:

  • atraso no clique
  • scroll estranho
  • interface travando

Não porque a internet estava ruim.

Mas porque a CPU do navegador estava ocupada demais.

Hydration amplia o custo em certos apps

Quando a pagina chega com HTML server-side, muita gente conclui que “já esta rápido”.

Só que hydration também cobra:

  • baixar script
  • executar script
  • ligar comportamento

Em app pesado, o HTML aparece cedo, mas a interatividade ainda demora.

Muito JavaScript também custa manutenção

Não e só performance técnica.

Quanto mais código no cliente:

  • mais chance de bug de estado
  • mais superficie de mismatch
  • mais coisa para depurar no browser
  • mais trabalho em cada navegação ou interação

Menos JavaScript relevante não e só otimização.

Também pode ser simplificação do produto.

Exemplo simples

Imagine duas paginas.

Pagina A:

  • HTML aparece rápido
  • mas baixa um bundle enorme para hidratar tudo
  • ao clicar, a tela demora a reagir

Pagina B:

  • envia menos script
  • hidrata só partes necessárias
  • interage melhor mesmo com aparencia inicial parecida

Se você olhar só para “o HTML apareceu”, pode achar as duas equivalentes.

Se olhar para custo real de JavaScript, percebe que a segunda entrega experiência melhor.

Erros comuns

  • Medir só bundle size e ignorar execução.
  • Achar que rede boa neutraliza custo de JS.
  • Tratar hydration como gratis.
  • Mover tudo para cliente por conveniencia e chamar isso de arquitetura.
  • Julgar performance sem considerar dispositivo mediano ou fraco.

Como um senior pensa

Quem tem mais experiência costuma perguntar:

“Quanto JavaScript eu realmente preciso mandar, e quanto trabalho eu realmente preciso fazer no cliente?”

Essa pergunta e forte porque ataca duas fontes de custo ao mesmo tempo:

  • bytes desnecessarios
  • execução desnecessaria

Em vez de só comprimir melhor o excesso, ela questiona o excesso em si.

O que o entrevistador quer ver

Em entrevista, esse assunto separa bem quem entende browser de quem olha só para rede.

Você sobe de nivel quando:

  • fala de CPU alem de download
  • menciona parse, execução e thread principal
  • conecta hydration a interatividade
  • mostra que reduzir JS também e reduzir trabalho

Uma resposta forte costuma soar assim:

“JavaScript custa em rede, mas também custa muito em parse, execução e competicao pela thread principal. Por isso pagina com muito script pode continuar lenta mesmo quando o HTML aparece cedo e a conexão e boa.”

O problema de JavaScript no frontend nem sempre e baixar demais. Muitas vezes e fazer o navegador trabalhar demais.

Resumo rápido

O que vale manter na cabeça

Checklist de pratica

Use isto ao responder

Você concluiu este artigo

Parte da trilha: Trilha para entrevistas de senior frontend (11/15)

Próximo artigo Event Loop de Verdade no Browser Artigo anterior CORS: por que Existe e Como Funciona de Verdade

Continue explorando

Artigos relacionados