시작하기
이 페이지에서는 포인트 100만 개짜리 상호작용 선 차트를 만듭니다. Vite 같은 번들러를 쓴다고 가정합니다. 다른 환경은 설치와 번들러를 보세요.
설치
주의
charturbo 패키지는 아직 npm에 배포되지 않았습니다. 첫 릴리스 전까지는 소스에서 빌드해 tarball을 설치하세요. 소스에서 빌드를 보세요.
릴리스 후:
bash
npm install charturbo캔버스 추가
SDK는 <canvas>에 그리고, 제목·범례·축 라벨·툴팁용 DOM 요소를 추가합니다. 이 요소들은 캔버스의 부모 요소에 붙고 캔버스 위치를 기준으로 배치되므로, 캔버스를 position: relative인 컨테이너로 감싸세요. 캔버스에 CSS 크기를 주면 픽셀 크기는 자동으로 맞춰집니다.
html
<div class="chart">
<canvas id="chart"></canvas>
</div>
<style>
.chart { position: relative; height: 360px; }
.chart canvas { display: block; width: 100%; height: 100%; }
</style>첫 차트 그리기
ts
import { Charturbo } from 'charturbo';
const canvas = document.querySelector<HTMLCanvasElement>('#chart')!;
const sdk = await Charturbo.create(canvas);
// Float32Array에 담은 샘플 1,000,000개
const values = new Float32Array(1_000_000);
let walk = 0;
for (let i = 0; i < values.length; i++) {
walk += (Math.random() - 0.5) * 0.4;
values[i] = walk;
}
sdk.renderLineChart([{ name: '센서 A', values }], {
title: '텔레메트리',
axes: { x: { title: '샘플', format: '.2s' }, y: { format: '.1f' } },
});
sdk.render();각 단계에서 일어나는 일:
Charturbo.create(canvas)가 WebAssembly 모듈을 불러오고(페이지당 한 번) WebGPU로, WebGPU가 없으면 WebGL2로 엔진을 시작합니다.renderLineChart가 데이터를 엔진에 넘깁니다.x가 없으면 샘플은 인덱스 간격으로 놓입니다.render()가 프레임을 그립니다. SDK에는 쉬는 동안 도는 렌더 루프가 없으므로, 무언가를 바꾼 뒤에는render()를 호출하세요.
상호작용 추가
ts
sdk.enableNodeInteractions(canvas, { autoRender: true });툴팁, x축 휠 줌, 드래그 팬, 더블클릭 리셋이 켜집니다. 터치 기기에서는 핀치 줌, 드래그 팬, 탭으로 툴팁 고정, 길게 눌러 스크럽, 더블탭 리셋이 동작합니다. autoRender: true는 상호작용마다 render()를 호출합니다. 이 옵션이 없으면 프레임을 직접 그려야 합니다.
이 호출은 리스너를 다시 제거하는 함수를 반환합니다. 줌 축, 박스 줌, 브러시 선택, 터치 옵션은 상호작용을 보세요.
데이터 갱신
ts
// 청크를 추가하고 최신 샘플 100,000개만 유지
sdk.appendSeriesData(0, nextChunk, undefined, { maxPoints: 100_000 });
sdk.render();setSeriesData(seriesIndex, values, x?)는 시리즈 하나를 교체하고 스타일과 줌은 유지합니다. 실시간 스트리밍을 보세요.
지원하지 않는 브라우저 처리
ts
import { Charturbo, CharturboInitError } from 'charturbo';
if (!(await Charturbo.isSupported())) {
showFallback(); // WebGPU 어댑터도 WebGL2도 없음
} else {
try {
const sdk = await Charturbo.create(canvas);
// ...
} catch (e) {
if (e instanceof CharturboInitError) console.warn(e.reason); // 'no-webgpu' | 'adapter' | 'device' | 'wasm'
}
}정리
ts
sdk.dispose(); // 리스너와 오버레이 DOM 제거, 엔진 해제차트가 페이지에서 사라질 때(라우트 변경, 컴포넌트 언마운트) 호출하세요. React와 Vue 컴포넌트는 이 작업을 대신 합니다.
React · Vue에서 쓰기
tsx
import { CharturboChart } from 'charturbo/react';
<CharturboChart type="line" data={series} options={{ title: 'CPU' }} style={{ height: 300 }} />;