이벤트 배칭은 여러 이벤트를 묶어서 애널리틱스 서비스에 보내기 전에 진행하는 성능 최적화 기술입니다. 이는 다음과 같은 경우에 특히 유용합니다:
- 내부 배칭 기능이 있는 애널리틱스 서비스(Amplitude 또는 Google Analytics)를 사용하지 않는 경우
- 네트워크 요청 수를 줄이고 싶은 경우
- 성능을 최적화하고 싶은 경우
트래커 설정에서 배칭을 활성화합니다:
const [Track, useTracker] = createTracker({
// ... other config
batch: {
enable: true,
interval: 2000,
thresholdSize: 100,
onFlush: (batch, isBrowserClosing) => {
if (isBrowserClosing) {
// 브라우저가 닫힐 때 신뢰할 수 있는 전송을 위해 sendBeacon 사용
navigator.sendBeacon("/analytics/collect/batch", JSON.stringify(batch));
return;
}
// 일반 배칭 처리
fetch("/analytics/collect/batch", {
method: "POST",
body: JSON.stringify(batch),
});
},
},
});enable: boolean(기본값:false)- 배칭 활성화/비활성화
interval: number(기본값:3000)- 배칭 처리 간격 (ms)
thresholdSize: number(기본값:25)- 배칭 처리 전 최대 이벤트 수
onFlush: (batch: Batch[], isBrowserClosing: boolean) => void | Promise<void>- 배칭 활성화 시 필요
- 배칭 처리 함수
isBrowserClosing브라우저 닫힘 시 배칭 처리 여부
onError: (error: Error) => void | Promise<void>- 배칭 처리 실패 시 오류 처리 함수
- 이벤트는 메모리에 수집됩니다
- 다음 중 하나가 발생할 때 배칭이 처리됩니다:
- 구성된 간격이 도달합니다
- 배칭 크기가 임계치에 도달합니다
- 브라우저가 닫힐 때
const [Track, useTracker] = createTracker({
DOMEvents: {
onClick: (clickParams, context) => {
// 반환 값이 배칭됩니다
return {
...clickParams,
...context,
event_type: "click",
timestamp: new Date().getTime(),
};
},
},
batch: {
enable: true,
interval: 2000,
thresholdSize: 100,
onFlush: (batch, isBrowserClosing) => {
// Process the batch
},
},
});
function App() {
return (
<Track.Provider initialContext={{ deviceId: "device-123" }}>
<Track.Click params={{ buttonId: "submit" }}>
<button>Submit</button>
</Track.Click>
</Track.Provider>
);
}버튼을 여러 번 클릭했을 때:
- 각 클릭은
onClick핸들러를 실행합니다 - 각 핸들러의 반환 값은 배치 큐에 추가됩니다
- 2초(또는 임계치에 도달할 때)가 지나면
onFlush가 모든 수집된 이벤트와 함께 호출됩니다
브라우저가 닫힐 때, navigator.sendBeacon을 사용하여 이벤트 전송을 보장합니다:
onFlush: (batch, isBrowserClosing) => {
if (isBrowserClosing) {
navigator.sendBeacon("/analytics/collect/batch", JSON.stringify(batch));
return;
}
// 일반 배칭 처리
fetch("/analytics/collect/batch", {
method: "POST",
body: JSON.stringify(batch),
});
};- 이벤트 핸들러의 반환 값만 배칭되며, 핸들러 자체는 배칭되지 않습니다
- 배칭된 이벤트는 원래 매개변수와 컨텍스트를 유지합니다
- 이벤트는 순서대로 처리되며, 사용자 작업의 순서를 유지합니다
- 브라우저 닫힘 시 이벤트 전송을 보장하기 위해
navigator.sendBeacon을 사용합니다