Modèle de données et propriété
Formes de tableaux typés, règles de validation, lacunes et transfert de propriété vers le worker
Sixtyfold reçoit chaque champ numérique dans son propre Float64Array au lieu de millions d’objets ligne. Cette disposition en colonnes rend le transfert vers un worker et le rendu prévisibles.
Les formes ci‑dessous sont les entrées acceptées par les méthodes line et stock.
Données en ligne
Un jeu de données mono‑série a une colonne X ordonnée et une colonne Y :
interface TimeSeriesData {
x: Float64Array;
y: Float64Array;
length: number;
}Les données multi‑séries partagent X entre chaque série :
interface MultiSeriesData {
x: Float64Array;
series: Array<Float64Array | {
low: Float64Array;
high: Float64Array;
y?: Float64Array;
}>;
length: number;
seriesCount: number;
}N’utilisez l’objet range que pour une série range ou band. low et high définissent l’enveloppe ; y optionnel fournit son trait central explicite. Omettez y, ou fixez la largeur de la série à zéro, lorsqu’un point milieu synthétisé serait trompeur.
Les valeurs X doivent être finies et croissantes. Les horodatages sont des nombres ordinaires ; les millisecondes epoch sont conventionnelles mais non obligatoires. minViewportRange, les valeurs de viewport, les horodatages des marqueurs et toutes les autres options de domaine X utilisent la même unité que X.
Utilisez NaN dans les tableaux Y, range-low ou range-high pour une observation manquante réelle. Les renderers connectés interrompent le tracé au lieu de dessiner à travers la lacune.
Données OHLCV
interface OHLCVData {
timestamp: Float64Array;
open: Float64Array;
high: Float64Array;
low: Float64Array;
close: Float64Array;
volume: Float64Array;
length: number;
}Les six colonnes doivent être alignées et contenir au moins length entrées. normalizeOHLCVData accepte des horodatages croissants ou décroissants. Les entrées croissantes conservent leurs tableaux ; les entrées décroissantes sont copiées et renversées sans muter l’appelant.
Ne synthétisez pas de fermetures d’échange ni d’intervalles d’alimentation absents uniquement pour rendre les horodatages réguliers. timeScale: "market" compresse visuellement les intervalles absents tandis que les étiquettes, événements et marqueurs conservent leurs horodatages réels.
Propriété des buffers
En mode worker, les API de lots en masse setData, setMultiSeriesData, addVectors, StockChart.setData et stock transfèrent les buffers de tableaux typés au renderer pour le chemin le plus rapide. Les buffers transférés deviennent détachés et ne doivent pas être lus ni réutilisés par l’appelant.
Clonez explicitement lorsque l’application doit conserver sa propre copie :
chart.setData({
x: sourceX.slice(),
y: sourceY.slice(),
length: sourceX.length,
});Ne comptez pas sur le comportement de repli du thread principal pour conserver la propriété. Traitez les entrées en masse comme transférées quel que soit le renderer résolu afin que le changement de navigateur ou de politique CSP ne puisse pas altérer la correction de l’application.
Streaming
Le streaming de lignes utilise un buffer circulaire de taille fixe initialisé avec initStreaming(seriesCount, maxPoints). Le streaming de stock utilise initStreaming(maxCandles). Une fois la capacité atteinte, les observations les plus anciennes sont remplacées tout en préservant le rendu chronologique.
Utilisez les méthodes de lots vector ou candle lorsque les données arrivent déjà en colonnes. Les méthodes mono‑observation mettent en lot via requestAnimationFrame et sont pratiques pour des débits live modestes.