Datenmodell und Eigentum
Shapes von Typed-Arrays, Validierungsregeln, Lücken und Worker-Transfer-Eigentum
Sixtyfold empfängt jedes numerische Feld in seinem eigenen Float64Array statt als Millionen von Zeilenobjekten. Dieses Spaltenlayout macht den Transfer zu einem Worker und das Rendern vorhersehbar.
Die untenstehenden Shapes sind die Eingaben, die von den line-Methoden und den stock-Methoden akzeptiert werden.
Liniendaten
Ein Einzelt‑Serien‑Datensatz hat eine geordnete X‑Spalte und eine Y‑Spalte:
interface TimeSeriesData {
x: Float64Array;
y: Float64Array;
length: number;
}Mehrere Serien teilen die X‑Werte über alle Serien hinweg:
interface MultiSeriesData {
x: Float64Array;
series: Array<Float64Array | {
low: Float64Array;
high: Float64Array;
y?: Float64Array;
}>;
length: number;
seriesCount: number;
}Verwenden Sie das range‑Objekt nur für eine range oder band‑Serie. low und high definieren die Hülle; optional liefert y deren explizite Mittelachsen‑Strecke. Lassen Sie y weg oder setzen Sie die Serienbreite auf null, wenn ein synthetisierter Mittelpunkt irreführend wäre.
X‑Werte müssen endlich und aufsteigend sein. Zeitstempel sind gewöhnliche Zahlen; Epoch‑Millisekunden sind konventionell, aber nicht zwingend. minViewportRange, Viewport‑Werte, Marker‑Zeitstempel und alle anderen X‑Domain‑Optionen verwenden dieselbe Einheit wie X.
Verwenden Sie NaN in Y‑, range‑low‑ oder range‑high‑Arrays für eine tatsächlich fehlende Beobachtung. Verbundene Renderer unterbrechen den Pfad, anstatt durch die Lücke zu zeichnen.
OHLCV‑Daten
interface OHLCVData {
timestamp: Float64Array;
open: Float64Array;
high: Float64Array;
low: Float64Array;
close: Float64Array;
volume: Float64Array;
length: number;
}Alle sechs Spalten müssen die gleiche Länge haben. StockChart.setData verwendet normalizeOHLCVData, um die effektive Länge aus der Zeitstempelspalte zu ermitteln und endliche, monoton auf- oder absteigende Zeitstempel zu validieren. Gleiche Zeitstempel werden für statische Historie akzeptiert. Aufsteigende Eingaben behalten ihre Arrays; absteigende Eingaben werden kopiert und umgekehrt, ohne den Aufrufer zu mutieren.
Synthetisieren Sie keine Daten für Börsenschließzeiten oder fehlende Feed‑Intervalle, nur um Zeitstempel regelmäßig erscheinen zu lassen. timeScale: "market" komprimiert fehlende Intervalle visuell, während Beschriftungen, Ereignisse und Marker ihre tatsächlichen Zeitstempel beibehalten.
Puffer-Eigentum
Im Worker‑Modus übertragen die Bulk‑APIs setData, setMultiSeriesData, addVectors, StockChart.setData und die Stock‑Batch‑APIs typisierte Array‑Puffer an den Renderer für den schnellsten Pfad. Übertragene Puffer werden detached und dürfen vom Aufrufer nicht mehr gelesen oder wiederverwendet werden.
Klonen Sie explizit, wenn die Anwendung eine eigene Kopie behalten muss:
chart.setData({
x: sourceX.slice(),
y: sourceY.slice(),
length: sourceX.length,
});Verlassen Sie sich nicht auf ein Fallback-Verhalten des Hauptthreads, um Eigentum zu behalten. Behandeln Sie Masseninputs unabhängig vom aufgelösten Renderer als übertragen, damit ein Wechsel des Browsers oder der CSP-Richtlinien die Korrektheit der Anwendung nicht beeinträchtigen.
Streaming
Line-Streaming verwendet einen Ringpuffer fester Größe, der mit initStreaming(seriesCount, maxPoints) initialisiert wird. Stock-Streaming verwendet initStreaming(maxCandles). Kapazitäten und die Anzahl der Linienserien müssen positive Ganzzahlen sein. Sobald die Kapazität erreicht ist, werden die ältesten Beobachtungen ersetzt, wobei die chronologische Darstellung erhalten bleibt.
Verwenden Sie Vektor‑ oder Kerzen‑Batch‑Methoden, wenn Daten bereits spaltenweise eintreffen. Einzelbeobachtungs‑Methoden bündeln über requestAnimationFrame und behalten ihre Reihenfolge relativ zu Bulk‑Anhängen bei. Die Linie addVector kopiert ihre Werte vor dem Einreihen, sodass ein skalares Werte‑Array sofort wiederverwendet werden kann.
Line-Appends erfordern endliche Zeitstempel und ausgerichtete Serien-Spalten. Das X muss aufsteigend bleiben und Lücken dürfen nur in den Y-Spalten dargestellt werden. Stock-Appends erfordern zusätzlich strikt zunehmende Zeitstempel über Aufrufe, in der Warteschlange stehende Kerzen und in jedem Chunk; das Wiederholen eines Zeitstempels ist keine Aktualisierungsoperation.
Die Stapelvalidierung läuft, bevor wartende Samples geleert oder Eingaben übertragen werden. Abgelehnte Längen oder Zeitstempel lassen die ausstehenden Samples unverändert und die Puffer des Aufrufers angehängt; addCandleBatches validiert alle Chunks, bevor einer von ihnen übertragen wird. Diese Prüfungen ersetzen nicht die anwendungsseitige Validierung von Einheiten, Preisen, Volumina oder anderer Feed-Semantik. Siehe Line streaming und Stock streaming für die methode-spezifischen Verträge.