数据模型与所有权
类型化数组的形状、校验规则、缺口以及 Worker 的传输所有权。
Sixtyfold 接收每个数值字段为各自的 Float64Array,而不是以百万行对象的形式。此列式布局使得传输到 Worker 和渲染变得可预测。
下列形状是 line 方法 和 stock 方法 接受的输入。
折线数据
单系列数据集具有一列有序的 X 和一列 Y:
interface TimeSeriesData {
x: Float64Array;
y: Float64Array;
length: number;
}多系列数据在每个系列间共享 X:
interface MultiSeriesData {
x: Float64Array;
series: Array<Float64Array | {
low: Float64Array;
high: Float64Array;
y?: Float64Array;
}>;
length: number;
seriesCount: number;
}仅在 range 或 band 系列中使用范围对象。low 和 high 定义包络;可选的 y 提供其显式中心描边。当合成中点会产生误导时,省略 y 或将系列宽度设为零。
X 值必须为有限且递增。时间戳为普通数字;以纪元毫秒为单位是惯例但非强制。minViewportRange、视口值、标记时间戳以及所有其他 X 域选项使用与 X 相同的单位。
在 Y、range-low 或 range-high 数组中使用 NaN 表示真实的缺失观测。连接渲染器会断开路径,而不是穿越缺口绘制。
OHLCV 数据
interface OHLCVData {
timestamp: Float64Array;
open: Float64Array;
high: Float64Array;
low: Float64Array;
close: Float64Array;
volume: Float64Array;
length: number;
}所有六列必须对齐且至少包含 length 个条目。normalizeOHLCVData 接受递增或递减的时间戳。递增输入保留其数组;递减输入会被复制并反转,且不会修改调用方。
不要仅为使时间戳规则化而合成交易所收盘或缺失的行情区间。timeScale: "market" 在视觉上压缩缺失区间,而标签、事件和标记保留其真实时间戳。
缓冲区所有权
在 Worker 模式下,大批量的 setData、setMultiSeriesData、addVectors、StockChart.setData 和股票批处理 API 会将类型化数组缓冲区传输到渲染器以获得最快路径。被传输的缓冲区将变为分离状态,调用方不得读取或重用。
当应用必须保留自身副本时,请显式克隆:
chart.setData({
x: sourceX.slice(),
y: sourceY.slice(),
length: sourceX.length,
});不要依赖主线程回退行为来保留所有权。即使渲染器的解析结果不同,也应将批量输入视为已传输,以免更换浏览器或 CSP 策略改变应用正确性。
流式传输
折线流使用以 initStreaming(seriesCount, maxPoints) 初始化的固定大小环形缓冲区。股票流使用 initStreaming(maxCandles)。一旦达到容量,最旧的观测将被替换,同时保留时间顺序渲染。
当数据已按列到达时,使用向量或蜡烛批处理方法。单条观测方法通过 requestAnimationFrame 进行批处理,适用于适度的实时速率。