Modelo de dados e propriedade
Formas de arrays tipados, regras de validação, lacunas e transferência de propriedade para worker
A Sixtyfold recebe cada campo numérico na sua própria Float64Array em vez de como milhões de objetos de linha. Este layout por colunas torna a transferência para um worker e a renderização previsíveis.
As formas abaixo são as entradas aceites pelos métodos de linha e métodos de ações.
Dados de linha
Um conjunto de dados de série única tem uma coluna X ordenada e uma coluna Y:
interface TimeSeriesData {
x: Float64Array;
y: Float64Array;
length: number;
}Dados de múltiplas séries partilham X por todas as séries:
interface MultiSeriesData {
x: Float64Array;
series: Array<Float64Array | {
low: Float64Array;
high: Float64Array;
y?: Float64Array;
}>;
length: number;
seriesCount: number;
}Use o objeto range apenas para uma série range ou band. low e high definem o envelope; a y opcional fornece o seu traço central explícito. Omitir y, ou definir a largura da série para zero, quando um ponto médio sintetizado seria enganador.
Os valores X devem ser finitos e ascendentes. Carimbos temporais são números ordinários; milissegundos desde a época são convencionais mas não obrigatórios. minViewportRange, valores de viewport, carimbos de marcadores e todas as outras opções de domínio X usam a mesma unidade que X.
Use NaN em arrays de Y, range-low ou range-high para uma observação real em falta. Renderizadores com ligação interrompem o traço em vez de desenhar através da lacuna.
Dados OHLCV
interface OHLCVData {
timestamp: Float64Array;
open: Float64Array;
high: Float64Array;
low: Float64Array;
close: Float64Array;
volume: Float64Array;
length: number;
}As seis colunas devem estar alinhadas e ter pelo menos length entradas. normalizeOHLCVData aceita carimbos ascendentes ou descendentes. Entrada ascendente mantém os seus arrays; entrada descendente é copiada e invertida sem mutar o chamador.
Não sintetize encerramentos de bolsa ou intervalos de feed ausentes apenas para tornar os carimbos regulares. timeScale: "market" comprime visualmente intervalos ausentes enquanto rótulos, eventos e marcadores mantêm os seus carimbos reais.
Propriedade de buffers
Em modo worker, as APIs de lotes em massa setData, setMultiSeriesData, addVectors, StockChart.setData e de ações transferem buffers de arrays tipados para o renderizador para o caminho mais rápido. Buffers transferidos ficam destacados e não devem ser lidos nem reutilizados pelo chamador.
Clone explicitamente quando a aplicação precisar de reter a sua própria cópia:
chart.setData({
x: sourceX.slice(),
y: sourceY.slice(),
length: sourceX.length,
});Não confie no comportamento de fallback do thread principal para reter a propriedade. Trate entradas em massa como transferidas independentemente do renderizador resolvido para que a mudança de browser ou políticas CSP não altere a corretude da aplicação.
Fluxo contínuo
O streaming de linha usa um buffer circular de tamanho fixo inicializado com initStreaming(seriesCount, maxPoints). O streaming de ações usa initStreaming(maxCandles). Uma vez atingida a capacidade, as observações mais antigas são substituídas enquanto a renderização cronológica é preservada.
Use métodos de lote vetorial ou de velas quando os dados já chegam em colunas. Métodos de observação única agrupam através de requestAnimationFrame e são convenientes para taxas de atualização moderadas.