Skip to content

Async Indicator Workers

Stage 1 ships CPU-heavy indicators on a shared Web Worker pool so the main thread stays responsive during large-series analysis.

API

typescript
import {
  rsiAsync,
  smaAsync,
  emaAsync,
  macdAsync,
  bollingerBandsAsync,
  destroyIndicatorPool,
} from 'velo-plot/scientific';

const closes = new Float32Array(100_000);
// ... fill closes ...

const rsi = await rsiAsync(closes, 14);
const sma = await smaAsync(closes, 20);
const ema = await emaAsync(closes, 12);
const macd = await macdAsync(closes, 12, 26, 9);
const bb = await bollingerBandsAsync(closes, 20, 2);

// Optional: tear down workers when done
destroyIndicatorPool();

Supported indicators

FunctionDescription
rsiAsync(data, period)Relative Strength Index
smaAsync(data, period)Simple Moving Average
emaAsync(data, period)Exponential Moving Average
macdAsync(data, fast, slow, signal)MACD line, signal, histogram
bollingerBandsAsync(data, period, stdDev)Upper, middle, lower bands

Pool lifecycle

Workers are created lazily on first use and reused across calls. Use destroyIndicatorPool() when unloading the chart or navigating away to free threads.

typescript
import { getIndicatorPoolSize } from 'velo-plot/scientific';

console.log(getIndicatorPoolSize()); // active worker count

See also

Known limitations

  • Worker path requires a bundler that resolves worker entry points; falls back to main thread when unavailable.

Released under the MIT License.