Frontends com Vibecoding · Capítulo 18 de 35 · 18 min
Dimensionar tabelas e organizar o cálculo das métricas
Você dimensiona a tabela pesada pelo volume medido e decide, pela frequência de consulta, em que momento cada métrica é calculada.
Este capítulo faz parte do curso gratuito Frontends com Vibecoding.
A tabela que roda bem com 30 linhas de teste engasga quando um cliente abre a mesma tela com 30 mil. O degrau certo se escolhe medindo o volume real no computador mais fraco disponível. Quem decide a tela de dados da própria empresa fica com cinco degraus, o momento de calcular cada número e o relatório offline.
Você termina sabendo perguntar quantas linhas a tabela mais pesada do sistema vai mostrar no cliente maior e escolher a solução pelo número, e não pelo nome da biblioteca. Tempo de leitura: cerca de 18 minutos, e a medição da tabela mais pesada do sistema, mais 15.
O primeiro degrau é a tabela nativa do navegador, o <table> de sempre. Custa quase nada, nasce acessível e aguenta poucos milhares de linhas com algarismos tabulares (dígitos de largura igual, que alinham em coluna) e folha de impressão.
Vem depois a tabela virtualizada, que desenha só as linhas visíveis no momento, como a vitrine que troca de produto conforme você anda. Essa virtualização vai confortável até perto de 100 mil linhas, com o TanStack Virtual. O preço é que a busca do navegador só acha o que está desenhado naquele instante.
Ver como texto
À esquerda, uma coluna longa representa todas as linhas do dado. Uma moldura destacada marca a janela visível. Linhas tracejadas ligam essa janela à tela à direita, onde só as linhas visíveis estão desenhadas. Uma nota avisa que o Ctrl F só acha o que foi desenhado, e o rodapé lembra que o TanStack Virtual vai confortável até perto de 100 mil linhas.
Em React, a base desse degrau é a TanStack Table v9. Ela é headless, ou seja, calcula ordenação, filtro e paginação e deixa o desenho com você, como um motor sem carroceria. Paginação é quebrar a lista em páginas de tamanho fixo, para o navegador não carregar tudo de uma vez.
O terceiro degrau é a grade que calcula, a tabela que faz conta dentro da própria célula. O AG Grid trouxe fórmulas e totais por grupo, e vira uma mini-planilha sem passar pelo Excel. MUI X Data Grid e Mantine DataTable resolvem o mesmo quando o design system, a caixa de peças da marca, já é esse.
Milhões de células pedem canvas. O Glide Data Grid desenha em pixels e, por isso, exige uma camada ARIA paralela, as etiquetas que descrevem cada célula ao leitor de tela. O desenho em si devolve nada a quem não enxerga.
Pivô é a tabela que cruza duas dimensões e soma o que cai em cada cruzamento. O AntV S2 monta um com milhões de células em menos de quatro segundos. O VTable faz o mesmo e deixa abrir cada total até a linha que o originou.
Planilha de verdade, com fórmula, tabela dinâmica e edição a várias mãos, é outro produto e outro orçamento. O Univer é o sucessor oficial do Luckysheet, que foi declarado sem manutenção, e o Fortune-sheet é o caminho de migração com menos atrito.
| Degrau | Volume e função | Ferramenta | Preço a pagar |
|---|---|---|---|
| Tabela HTML | Até poucos milhares de linhas, leitura e ordenação simples | <table> nativo, algarismos tabulares e folha de impressão | Quase nenhum; nasce acessível |
| Só o visível na tela | De algumas centenas a cerca de 100 mil linhas | TanStack Table v9 com TanStack Virtual | A busca do navegador só acha o que está desenhado |
| Grade que calcula | Fórmula, agregação e edição na própria célula | AG Grid 35 e 36; MUI X Data Grid ou Mantine DataTable no design system da casa | Licença e peso de pacote |
| Milhões de células | Pivô e rolagem em massa | Glide Data Grid em canvas; AntV S2 (pivô em menos de 4 s); VTable | Camada ARIA paralela obrigatória |
| Planilha embutida | Fórmula, tabela dinâmica e edição a várias mãos | Univer; Fortune-sheet na migração do Luckysheet | Um produto inteiro para manter |
Suba de degrau só depois de medir com o volume real, no computador mais fraco disponível.
A frequência com que o número muda decide quando ele é calculado. Se muda uma vez por dia, calcule antes de publicar e sirva um retrato pronto, leve e imprimível. Se muda com o filtro de quem lê, consulte a fonte a cada visita e aceite que a infraestrutura cresce com a audiência.
Se muda várias vezes por segundo, como cotação ou telemetria, um motor dentro do navegador absorve o fluxo sem redesenhar a tela inteira. Escreva a fórmula de cada indicador uma vez só, no arquivo que todas as telas leem, como a aula anterior mostra. Todo número responde em dois cliques de onde veio: origem, data, responsável e definição.
Ver como texto
O espectro de quando o número é calculado. À esquerda, antes de publicar, com retrato estático: o pacote de conselho, leve e imprimível, para o número que muda uma vez por dia. No meio, a cada visita, consultando a fonte: marketing diário e filtro ao vivo, para o número que muda com o filtro. À direita, em fluxo contínuo dentro do navegador: cotação e telemetria, para o número que muda várias vezes por segundo.
O relatório offline seguro é um arquivo HTML único que carrega o banco de dados dentro do próprio navegador. Wasm é código compilado que roda na página quase na velocidade de um programa instalado, como um motor de aplicativo dentro do navegador.
Com cerca de 400 KB comprimidos, o SQLite Wasm basta para guardar tabelas e consultá-las no aparelho. O PGlite é um Postgres real em Wasm, com cerca de 3,3 MB, e só compensa quando você precisa mesmo dos tipos e das extensões do Postgres.
Já o DuckDB-Wasm segue defasado do núcleo nativo, e por isso não conte com paridade de recursos ao planejar o relatório.
Numa distribuidora, a lista de pedidos do mês roda na tabela nativa, e o histórico de anos pede o TanStack Virtual. A tabela de preço com margem por cliente pede a fórmula do AG Grid. O representante que visita cliente sem sinal leva o relatório de estoque num HTML único com SQLite Wasm, e fecha o pedido na hora.

Ver como texto
Um representante comercial mostra uma tabela num tablet ao dono de um bar, dentro de um depósito fechado cheio de caixas de garrafas.
Antes de aprovar a próxima tela pesada, gere um arquivo de teste com o volume real esperado. Abra a tela no computador mais fraco disponível. Escolha o degrau pela tabela de volumes, nunca pelo nome da biblioteca. Deu certo quando a rolagem não engasga e cada número mostra origem, data e responsável em dois cliques.
Guia prático: tabela como placar, especificada antes de pedir
Tabela pedida por adjetivo volta com colunas a mais, números desalinhados e nenhuma ideia do que aparece quando falta dado. A biblioteca de 648 prompts estudada em 07/10/2026 dá a pista do método: 163 prompts usam "exatamente" para fixar quantidades, e os que desenham placar ou tabela comparativa nomeiam cada coluna e fixam o número de linhas, como cinco colunas com nome e dez linhas num ranking. Se até um modelo de imagem precisa disso para acertar, o agente que escreve a sua tabela também.
O template de painel contábil da galeria, estudado no mesmo dia, mostra o que acontece sem essa especificação. A tabela de contadores tem sete colunas (contador, equipe, clientes, abertas, em atraso, SLA e ações), mas é feita com caixas em grade, sem elemento table: o leitor de tela não sabe que é uma tabela, e o projeto inteiro tem zero atributos aria e zero role. A página não tem nenhuma variação para celular, com 80 pixels fixos de margem lateral e quatro cartões lado a lado. Só a coluna de ações se alinha à direita, e o projeto soma 39 usos de texto de 10 a 12 pixels.
O que o template acerta merece cópia: um estado vazio completo, com título, explicação e duas ações (cadastrar um a um ou importar planilha), e um aviso de configuração incompleta que diz o que fazer. A lição: escreva a tabela como placar antes de pedir, com colunas, alinhamento, formato de cada número e os três estados.
/* Base de uma tabela de números legível, em CSS próprio. */
.placar { border-collapse: collapse; width: 100%; }
.placar caption { text-align: left; font-weight: 600; padding-block: 0.5rem; }
.placar th { text-align: left; font-weight: 600; }
.placar th, .placar td { padding: 0.625rem 0.75rem; border-bottom: 1px solid var(--linha); }
/* Colunas de número: à direita e com dígitos de largura igual. */
.placar .num { text-align: right; font-variant-numeric: tabular-nums; }
/* Destaque nunca só pela cor: a célula também diz "atrasado" em texto. */
.placar .atraso { color: var(--alerta); font-weight: 600; }
/* No celular, a tabela rola dentro do próprio contêiner, não a página. */
.placar-rolagem { overflow-x: auto; }Da tabela pedida por adjetivo ao placar especificado
Cinco passos para a próxima tabela de painel, de preços ou de comparação.
Passo 1: Escreva colunas, linhas e ordem
Liste cada coluna com nome, tipo (texto, número, data, moeda, porcentagem) e unidade. Diga quantas linhas aparecem por padrão e por qual coluna a tabela vem ordenada.
Deu certo quando: O pedido tem a lista de colunas com tipo e a ordenação padrão.
Erro comum: Deixar o agente escolher as colunas e receber oito, das quais você usa quatro.
Passo 2: Peça o elemento table com cabeçalho de verdade
Tabela de dados usa table, caption, th com scope e td. Caixas em grade só servem para layout. Com isso, o leitor de tela anuncia a coluna de cada célula.
Deu certo quando: O leitor de tela lê o nome da coluna junto de cada valor.
Erro comum: Aceitar uma grade de caixas que parece tabela e é invisível para quem não enxerga.
Passo 3: Alinhe números à direita com dígitos iguais
Coluna numérica vai à direita, com font-variant-numeric: tabular-nums, mesmo número de casas decimais e separadores do pt-BR. Assim milhar fica sob milhar.
Deu certo quando: Os valores de uma coluna se comparam de cima a baixo sem esforço.
Erro comum: Números alinhados à esquerda, com casas decimais diferentes em cada linha.
Passo 4: Desenhe os três estados
Carregando, vazio e com erro, além do estado cheio. O vazio diz por que está vazio e oferece a próxima ação; o erro diz o que tentar.
Deu certo quando: Os quatro estados existem e você viu cada um na tela.
Erro comum: Testar só com dados de exemplo e descobrir o vazio no primeiro dia do cliente.
Passo 5: Confira no celular e com dado real antes de publicar
Abra a tabela em 390 pixels com o volume real de linhas. Ela rola dentro do próprio contêiner, a primeira coluna continua legível e o texto respeita o piso do projeto.
Deu certo quando: A página não ganha rolagem lateral e cada linha se lê no celular.
Erro comum: Aprovar a tabela com três linhas de teste e margens fixas pensadas para tela larga.
No fim você tem: Uma tabela especificada como placar: colunas e linhas definidas, estrutura que o leitor de tela entende, números alinhados e os estados que o dia a dia vai mostrar.
Gestor de um escritório de contabilidade em Ribeirão Preto que monta o painel interno de demandas da equipe
Serviços contábeis, operação interna
Dor
O painel gerado listava os contadores numa grade bonita, mas as colunas de atraso e SLA não se comparavam de cima a baixo, e a tela quebrava no notebook pequeno da sócia.
Solução
Ele reescreveu o pedido como placar: seis colunas com tipo e unidade, ordenação por atraso, números à direita com dígitos iguais, elemento table com cabeçalhos e os estados vazio e de erro descritos.
Resultado do exemplo
A equipe passou a achar o contador com mais atraso na primeira linha, e a tabela ficou legível no notebook e no celular.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
O que mudou de agosto a outubro de 2026
As duas bibliotecas mais citadas no capítulo lançaram versões no trimestre: TanStack Table 9.3.1 em 12/10/2026 e AG Grid 36.2 em 16/09/2026, esta com exportação para PDF. Nenhuma das duas muda o critério de escolha: o volume real, medido no computador mais fraco que a equipe tiver, continua decidindo o degrau.

Ver como texto
Página inicial do TanStack Table, versão 9, com o título A powerful engine for building Data Grids, o texto que o descreve como um motor sem aparência própria para ordenar, paginar, filtrar, agrupar e somar, os botões Docs e Copy table prompt, um exemplo de tabela com status Active, Review e Shipped e os contadores de 1,2 bilhão de downloads e 21,4 milhões por semana.

Ver como texto
Página inicial do TanStack Virtual, versão 3, com o título Render only what matters, without surrendering the scroll surface, os botões Docs e Copy virtual prompt e uma demonstração de 100 mil linhas em que só 10 estão montadas na tela, com faixa visível de 1 a 6.

Ver como texto
Página What's New in AG Grid com dois cartões: a versão 36.2.0, de 16/09/2026, marcada como Latest, com destaques como PDF Export e filtros avançados; e a versão 36.1.0, de 05/08/2026, com destaques como edição de cabeçalho de coluna, AI Coding Skill e documentação em formato markdown.
Faça agora: meça a tabela mais pesada do sistema
Passo 1: Pergunte ao time qual tela mostra a maior tabela e quantas linhas ela tem no maior cliente.
Deu certo quando: Um número de linhas, e não "muitas".
Passo 2: Abra essa tela no computador mais simples da empresa, com o volume do maior cliente.
Deu certo quando: Você cronometra o tempo até a tabela responder ao primeiro clique.
Erro comum: Testar no computador do desenvolvedor, com dados de exemplo.
Passo 3: Localize o volume na tabela "O degrau da tabela pelo volume e pela função", mais acima no capítulo.
Deu certo quando: Você sabe em que degrau a tela deveria estar.
Passo 4: Compare com a solução usada hoje e leve a diferença ao fornecedor.
Deu certo quando: O pedido cita o volume medido e o degrau indicado.
No fim você tem: Uma decisão de tabela baseada no volume real, com o número medido anexado ao pedido.
Aplicar os recursos ao projeto
Ver como texto
Ordenar muda a posição, preservando o registro
Cenário ilustrativo com A igual a oitenta, B igual a noventa e C igual a cem. A segunda tabela inverte a ordem pela medida, mantendo o par entre nome e valor.
Seu caderno neste capítulo
Abrir o caderno completoSelecione um trecho do capítulo para destacar ou anotar. Nos vídeos e áudios, use Anotar este momento. No teclado, selecione com Shift e as setas e use Alt+Shift+D para destacar ou Alt+Shift+N para anotar.
Salvo neste navegador. Entre na sua conta para levar o caderno a outros aparelhos.
Entre na sua conta para compartilhar o que aprendeu e convidar alguém para estudar com você.
Conexões deste capítulo
Veja o que estudar antes e para onde seguir depois, explore os conceitos e compare abordagens em outros cursos. Sugestões marcadas como “sugerido pelo grafo” vêm dos assuntos em comum, não do índice do curso.
Estude antes
- CursoClaude Code: do zero à prática
- O que aparece no HTML e o que surge depoissugerido pelo grafoApresenta o conceito “HTML”, usado em “Dimensionar tabelas e organizar o cálculo das métricas”.
- CursoSíntese e didática com IAsugerido pelo grafoDepois de escolher a informação essencial e desenhar hierarquia, gráficos e fluxos compreensíveis, o aluno pode aplicar esses critérios às interfaces do curso de frontend. A ponte conecta clareza da mensagem, acessibilidade e decisões de apresentação.
- CursoNode.js: JavaScript no Servidorsugerido pelo grafo9 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Node.js: JavaScript no Servidor”.
Conceitos deste capítulo
O mesmo assunto em outros cursos
- Astra profundoConstruir um painel que ajuda a escolher a próxima oficinaExaminar conexões de Construir um painel que ajuda a escolher a próxima oficina
- Sistemas e dados para IAComo desenhar telas que a equipe consiga usar?Examinar conexões de Como desenhar telas que a equipe consiga usar?
- SEO programáticoApêndice: medir velocidade e capacidade da plataformaExaminar conexões de Apêndice: medir velocidade e capacidade da plataforma
- Dados com PythonPlanilha, BI ou Python: quem resolve cada perguntaExaminar conexões de Planilha, BI ou Python: quem resolve cada pergunta
Terminou a leitura?
Você está aqui: capítulo 18 de 35
0 de 35 concluídos
- Próximo · Capítulo 19 de 35 · 35 minEscolher mapas, diagramas e cenas espaciaisLer o capítulo 19 sem concluir
Marque como concluído para o capítulo contar no seu painel e no certificado.
- Anterior · Capítulo 17 de 35 · 62 minProjetar gráficos e painéis pela decisãoVoltar para o capítulo 17
Leve uma ideia para a prática
Escolha uma atividade no painel e volte a este curso quando quiser.
Atividades e evolução ficam reunidas no painel da sua conta.
Laboratórios ao vivo deste curso
Cada laboratório monta a biblioteca real dentro da aula, com controles para você mexer e o código do exemplo para copiar. O texto de reserva descreve a demonstração para quem lê sem JavaScript. O link abre o capítulo já no ponto do laboratório.
Base UI
Prenda o foco num diálogo sem escrever o comportamento
Abra a janela Agendar visita, percorra os campos com Tab, feche com Esc e acompanhe no painel onde o foco está e para onde ele volta.
Pacote
Abrir no capítuloConstruir componentes, usar o registro e publicar o catálogo@base-ui/reactLucide e Iconify
Mantenha uma família de ícones coerente e nomeie cada botão
Mude tamanho, traço e cor da barra, veja o símbolo do Iconify acompanhar o Lucide e rode a auditoria de nomes acessíveis.
Pacote
Abrir no capítuloProjetar uma linguagem de ícones e ilustraçãolucide-react, @iconify/reactMotion
Testar os três sinais que autorizam o terceiro degrau
Reproduza a entrada em sequência, aperte o botão com mola e arraste o cartão; ajuste rigidez e amortecimento e veja o que muda.
Pacote
Abrir no capítuloProjetar movimento, assinatura e narrativas por rolagemmotionVidstack
Ver o que separa um player de um vídeo cru
Dê o play, troque a velocidade e ligue a legenda; o painel ao lado mostra o estado que o player publica e que a etiqueta crua esconde.
Pacote
Abrir no capítuloProjetar movimento, assinatura e narrativas por rolagem@vidstack/reactcmdk
Achar um destino entre quarenta digitando três letras
Abra a paleta, digite fat e escolha um item só pelo teclado; o painel embaixo conta o que o filtro deixou passar e quanto tempo levou.
Pacote
Abrir no capítuloConstruir formulários e estados de interaçãocmdknumber-flow
Animar indicadores que mudam ao vivo com formato pt-BR
Veja três indicadores fictícios rolarem a cada troca e compare com o número em texto puro. Pause, reinicie e observe o separador de milhar.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisão@number-flow/reactApache ECharts
Medir o custo de desenhar 200 mil pontos com o ECharts
Troque o tipo de gráfico e o volume de pontos, leia o tempo de desenho e alterne o eixo em zero. Mude o tema do site e veja as cores refazerem.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisãoechartsApache ECharts
Painel grande com visões coordenadas
Clique num canal para filtrar todas as visões, troque a densidade entre 6, 9 e 12 visões, alterne tema e movimento e abra a tela cheia.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisãoechartssharp e svgo
Escolher a variante certa da imagem e conferir o teto de 150 KB
Arraste a largura da tela simulada, troque a densidade entre 1x e 2x e veja qual arquivo o navegador escolhe, quanto ele pesa e se cabe no orçamento.
Pacote
Abrir no capítuloValidar desempenho, autenticação e segurançasharp, svgoReact Flow (xyflow)
Disparar um pedido e ver o orquestrador distribuir, conferir e responder
Alterne paralelo e sequencial, ligue e desligue a verificação e use a medição real; observe o tempo de parede em cada combinação.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robô@xyflow/reactGSAP, Web Workers e number-flow
Dividir mil tarefas entre trabalhadores reais e correr três ritmos de geração
Execute com um trabalhador, depois com quatro e oito, e compare o tempo; em seguida percorra a corrida e separe a espera inicial do ritmo.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robôgsap, @number-flow/reactThree.js com React Three Fiber, drei, Rapier e XR
Carregar o braço robótico, ver a física trabalhar e entrar na cena com o visor
Carregue a cena pelo botão, inicie o ciclo, mostre os ângulos das juntas, troque a câmera e a velocidade; com visor, entre em realidade virtual.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robôthree, @react-three/fiber, @react-three/drei, @react-three/rapier, @react-three/xrMotion
Ver quatro agentes em raias trocando mensagens e a revisão devolvendo um trecho
Reproduza os 60 s de modelo, percorra o tempo pelo controle e esconda as mensagens para comparar a leitura; repare no tempo de parede contra a soma.
Pacote
Abrir no capítuloEspecificar, medir e produzir as cenas da máquinamotionMediaRecorder, Canvas 2D e Long Animation Frames (plataforma)
Medir o quadro da cena e gravar seis segundos dela em vídeo
Suba as partículas, force um bloqueio de 300 ms e leia o medidor; depois grave seis segundos, veja o codec escolhido e baixe o arquivo.
Pacote
Abrir no capítuloEspecificar, medir e produzir as cenas da máquinasem pacotesigma.js, graphology com ForceAtlas2 e cosmos.gl
Ver o grafo real do curso e um grafo de milhares de nós se organizarem em aglomerados
Rode o layout no grafo real, passe o mouse pelos nós e busque uma entidade; troque para 20 mil nós e leia o medidor; depois carregue o modo massivo na placa de vídeo.
Pacote
Abrir no capítuloAnimar um grafo de conhecimento amplo em movimentosigma, graphology, graphology-layout-forceatlas2, graphology-generators, @cosmos.gl/graph
Capítulos vizinhos em Frontends com Vibecoding
- 16Publicar conteúdo encontrável em vários idiomas
- 17Projetar gráficos e painéis pela decisão
- 18Dimensionar tabelas e organizar o cálculo das métricas
- 19Escolher mapas, diagramas e cenas espaciais
- 20Comparar direção visual em Stripe e Apple