Modelo de datos y propiedad
Formas de arrays tipados, reglas de validación, huecos y transferencia de propiedad a worker
Sixtyfold recibe cada campo numérico en su propio Float64Array en lugar de como millones de objetos fila. Esta disposición por columnas hace que la transferencia a un worker y el renderizado sean previsibles.
Las formas siguientes son las entradas aceptadas por los métodos de línea y por los métodos de acciones.
Datos de línea
Un conjunto de datos de una sola serie tiene una columna X ordenada y una columna Y:
interface TimeSeriesData {
x: Float64Array;
y: Float64Array;
length: number;
}Los datos multi-serie comparten X entre todas las series:
interface MultiSeriesData {
x: Float64Array;
series: Array<Float64Array | {
low: Float64Array;
high: Float64Array;
y?: Float64Array;
}>;
length: number;
seriesCount: number;
}Use el objeto range solo para una serie range o band. low y high definen la envolvente; la opcional y proporciona su trazo central explícito. Omita y, o fije el ancho de la serie a cero, cuando un punto medio sintetizado sería engañoso.
Los valores X deben ser finitos y ascendentes. Las marcas temporales son números ordinarios; los milisegundos desde la época son convencionales pero no obligatorios. minViewportRange, valores de viewport, marcas temporales de marcadores y cualquier otra opción de dominio X usan la misma unidad que X.
Use NaN en arrays Y, range-low o range-high para una observación real ausente. Los renderizadores conectados rompen la trayectoria en lugar de dibujar a través del hueco.
Datos OHLCV
interface OHLCVData {
timestamp: Float64Array;
open: Float64Array;
high: Float64Array;
low: Float64Array;
close: Float64Array;
volume: Float64Array;
length: number;
}Las seis columnas deben estar alineadas y tener al menos length entradas. normalizeOHLCVData acepta marcas temporales ascendentes o descendentes. La entrada ascendente conserva sus arrays; la entrada descendente se copia y se invierte sin mutar al llamador.
No sintetice cierres de intercambio ni intervalos de feed ausentes únicamente para hacer que las marcas temporales sean regulares. timeScale: "market" comprime visualmente los intervalos ausentes mientras las etiquetas, eventos y marcadores conservan sus marcas temporales reales.
Propiedad de buffers
En modo worker, las API por lotes de setData, setMultiSeriesData, addVectors, StockChart.setData y las de acciones transfieren los buffers de arrays tipados al renderer para el camino más rápido. Los buffers transferidos quedan desacoplados y no deben ser leídos ni reutilizados por el llamador.
Clone explícitamente cuando la aplicación deba conservar su propia copia:
chart.setData({
x: sourceX.slice(),
y: sourceY.slice(),
length: sourceX.length,
});No confíe en el comportamiento de fallback del main thread para retener la propiedad. Trate las entradas por lotes como transferidas independientemente del renderer resuelto para que cambiar de navegador o políticas CSP no pueda alterar la corrección de la aplicación.
Transmisión continua
El streaming de línea usa un buffer circular de tamaño fijo inicializado con initStreaming(seriesCount, maxPoints). El streaming de acciones usa initStreaming(maxCandles). Una vez alcanzada la capacidad, las observaciones más antiguas se reemplazan mientras se preserva el renderizado cronológico.
Use los métodos por lotes vectoriales o de velas cuando los datos ya lleguen en columnas. Los métodos de observación única agrupan mediante requestAnimationFrame y son convenientes para tasas en vivo moderadas.