Guia de desempenho
Projete o carregamento de dados e as atualizações de gráficos para conjuntos de dados grandes.
A renderização rápida começa antes do Canvas2D. Mantenha os dados em formato colunar, transfira-os uma vez, evite a decodificação no thread principal e permita que o gráfico renderize apenas o detalhe visível no ecrã.
LOD significa nível de detalhe: o renderer usa uma representação do tamanho do ecrã para dados grandes e revela detalhes mais finos à medida que o utilizador aproxima. Comece com a seleção automática de worker e a política LOD por defeito, depois meça a carga real de trabalho. Utilize o laboratório de calibração LOD apenas antes de alterar a densidade, a proporção base ou a quantização.
Pipeline de carregamento recomendado
- Mostre uma pré-visualização pequena que preserve os extremos quando a latência do primeiro quadro for importante.
- Inicie a transferência de rede e a descodificação num worker dedicado de dados.
- Leia apenas as colunas e intervalos necessários de um formato colunar.
- Validar comprimentos alinhados, X ordenado finito, unidades e lacunas declaradas.
- Transferir colunas tipadas para o renderer do gráfico apenas uma vez.
- Terminar o worker de dados após a transferência para que não retenha outra cópia.
Para leituras HTTP por intervalos, garantir que o host estático suporta intervalos de bytes e que o cache intermédio os preserva; uma alternativa correta de descarga completa ainda pode ser demasiado dispendiosa para visitantes móveis.
Mantenha o bundle inicial pequeno
- Importe dinamicamente decodificadores de dados pesados e demonstrações opcionais.
- Monte apenas o gráfico atualmente visível ou selecionado.
- Não envie ficheiros de demonstração com milhões de linhas para uma página de aterragem apenas para provar que o renderer os aceita.
- Mantenha catálogos de temas e exemplos secundários fora de um caminho protegido do primeiro frame.
- Prefira exemplos curados ou adaptativos em dispositivos com recursos limitados e faça ligação para uma bancada de trabalho completa.
Escolha o modo worker
Use renderMode: "auto" em aplicações gerais e meça o modo resolvido. O modo thread principal é útil para testes e gráficos estáticos pequenos, mas conjuntos de dados interativos grandes devem normalmente correr num worker.
Ajuste a apresentação de linhas conforme a carga de trabalho
A maioria das aplicações não precisa de valores LOD personalizados.
lod.density é o controlo primário de fidelidade/trabalho. Comece em 0.75. Aumente-o quando o detalhe local for visivelmente insuficiente e o tempo de frame permanecer confortável. Diminua-o para intervalos preenchidos em múltiplas passagens, razões de píxel do dispositivo elevadas, ou navegadores onde o custo de preenchimento do Canvas2D predomina.
A suavidade da representação depende de rebaseRatio e quantizationStep, não apenas da densidade. Valores mais finos reduzem alterações individuais de textura mas tornam as consultas à hierarquia mais frequentes. Ajuste com gestos reais de zoom e compare o tempo de frame em estado estacionário, visitas de consultas, vértices de apresentação e estabilidade visual.
Use setStatsCallback temporariamente durante o desenvolvimento:
chart.setStatsCallback((stats) => {
console.table({
frame: stats.frameTime,
mode: stats.presentationMode,
vertices: stats.presentationVertices,
visits: stats.presentationQueryVisits,
ready: stats.lodReady,
});
}, { intervalMs: 250 });Desative a callback em produção quando a aplicação não consumir telemetria.
Agrupar atualizações
- Utilize APIs em massa para typed‑array quando um lote completo já existir.
- Use
batch()para várias alterações imperativas síncronas causadas por uma única ação de IU. - Evite construir arrays ou formatar strings dentro de callbacks por quadro.
- Debounce as reconstruções em streaming do lado da aplicação e ignore resultados assíncronos obsoletos.
Os construtores LOD em streaming do gráfico completam trabalho baseado em instantâneos enquanto novas amostras chegam e mantêm níveis concluídos utilizáveis até que um substituto esteja pronto. Não reinicie o streaming nem substitua o conjunto de dados completo para cada observação; anexe através das APIs de streaming em vez disso. O streaming de linhas atualiza limites incrementalmente em vez de reexaminar todo o buffer a cada append.
Os adaptadores de framework recolhem estatísticas apenas enquanto um callback ou um listener activo pode recebê‑las. O Vue interrompe a recolha depois de um único listener .once ser consumido; o Angular também interrompe quando as subscrições ou a saída são fechadas. Remova os listeners de telemetria quando a aplicação já não usar as suas medições.
Preservar o significado dos dados
A redução de desempenho deve reter os extremos e as lacunas reais. Nunca pré‑média um envelope de intervalo, ligar intervalos em falta ou subamostrar cada entrada de área empilhada independentemente. Para OHLCV, agregue open‑first, high‑maximum, low‑minimum, close‑last e volume somado com base nas observações reais.