성능 안내서

대용량 데이터셋에 맞춰 데이터 로딩과 차트 업데이트를 설계하세요.

빠른 렌더링은 Canvas2D 이전에 시작됩니다. 데이터는 열형(columnar)으로 유지하고 한 번만 전송하며 메인 스레드에서 디코딩하지 마세요. 차트는 화면에 보이는 상세 정보만 렌더링하게 하세요.

LOD는 상세도(level of detail) 를 뜻합니다: 렌더러는 대용량 데이터를 화면 크기 표현으로 사용하고 사용자가 확대할수록 더 세부적인 정보를 드러냅니다. 먼저 Worker 자동 선택과 기본 LOD 정책으로 시작한 뒤 실제 작업량을 측정하세요. 밀도, 리베이스 비율 또는 양자화(quantization)를 변경하기 전에는 LOD calibration lab]만 사용하세요.

권장 로딩 파이프라인

  1. 첫 프레임 지연이 중요할 때는 극값을 보존하는 작은 미리보기를 표시하세요.
  2. 전용 데이터 Worker에서 네트워크 페치와 디코딩을 시작하세요.
  3. 컬럼형 포맷에서 필요한 컬럼과 범위만 읽으세요.
  4. 정렬된 길이, 유한 순서 X, 단위, 및 선언된 간격을 검증하십시오.
  5. 타입 지정된 열을 한 번만 차트 렌더러로 전송하십시오.
  6. 전송 후 데이터 Worker를 종료하여 복사본을 유지하지 않도록 하십시오.

HTTP 범위 읽기의 경우 정적 호스트가 바이트 범위를 지원하고 중간 캐시가 이를 보존하는지 확인하십시오. 전체 다운로드 대체 전략이 있어도 모바일 방문자에게는 비용이 너무 클 수 있습니다.

초기 번들을 작게 유지하세요

  • 대용량 데이터 디코더와 선택적 데모는 동적으로 임포트하세요
  • 현재 보이거나 선택된 차트만 마운트하세요
  • 렌더러가 이를 처리할 수 있음을 입증하려고 착륙 페이지에 수백만 행의 쇼케이스 데이터를 그대로 배포하지 마세요
  • 테마 카탈로그와 보조 예제는 보호된 첫 프레임 경로에서 제외하세요.
  • 제약된 장치에서는 큐레이션된 또는 적응형 예제를 우선 사용하고 전체 워크벤치로 연결하세요.

Worker 모드를 선택하세요

일반 애플리케이션에서는 renderMode: "auto"를 사용하고 해결된 모드를 측정하세요. 메인 스레드 모드는 테스트나 작은 정적 차트에 유용하지만, 대규모 상호작용 데이터셋은 보통 Worker에서 실행해야 합니다.

작업 부하에 따라 선 표시 조정

대부분의 애플리케이션은 사용자 정의 LOD 값이 필요하지 않습니다.

lod.density는 기본적인 충실도/작업 제어입니다. 0.75에서 시작하세요. 로컬 디테일이 눈에 띄게 부족하고 프레임 시간이 여유가 있을 때 값을 높이세요. 멀티패스 채움 범위, 높은 디바이스 픽셀 비율 또는 Canvas2D 채움 비용이 지배적인 브라우저에서는 값을 낮추세요.

표현의 부드러움은 단순한 밀도뿐만 아니라 rebaseRatioquantizationStep에 좌우됩니다. 더 세밀한 값은 개별 텍스처 변경을 줄이지만 계층 쿼리를 더 빈번하게 만듭니다. 실제 확대/축소 제스처로 조정하고 정상 상태 프레임 시간, 쿼리 방문 횟수, 표시 정점 수 및 시각적 안정성을 비교하세요.

개발 중에는 일시적으로 setStatsCallback를 사용하세요:

chart.setStatsCallback((stats) => {
  console.table({
    frame: stats.frameTime,
    mode: stats.presentationMode,
    vertices: stats.presentationVertices,
    visits: stats.presentationQueryVisits,
    ready: stats.lodReady,
  });
}, { intervalMs: 250 });

애플리케이션이 텔레메트리를 사용하지 않는 프로덕션 환경에서는 콜백을 비활성화하세요.

업데이트 일괄 처리

  • 완전한 배치가 이미 존재하는 경우에는 대량 타입화 배열 API를 사용하세요.
  • 하나의 UI 동작으로 인해 발생하는 여러 동기적 명령형 변경에는 batch()을 사용하세요.
  • 프레임당 콜백 내부에서 배열을 생성하거나 문자열을 포맷하는 것을 피하세요.
  • 애플리케이션 측 스트리밍 재구성을 디바운스하고 오래된 비동기 결과는 무시하세요.

데이터의 의미를 보존하세요

성능 감소 시에도 극값과 실제 간극은 유지해야 합니다. 범위 엔벨로프를 미리 평균 처리하거나 누락된 구간을 연결하거나 각 스택형 면적 입력을 독립적으로 다운샘플링해서는 안 됩니다. OHLCV의 경우 실제 관측값을 기준으로 열린값(첫값)은 첫째(open-first), 최고값(maximum)은 최고, 최저값(minimum)은 최저, 종가(close-last)는 마지막, 거래량(volume)은 합계로 집계해야 합니다.