대용량 데이터
수천 개의 리프를 안정적으로 보여주기 위한 운영 전략입니다.
5,000개 항목은 레이아웃과 그리기 비용을 측정해야 하는 현실적인 검증 규모입니다. 화면에 보이는 극소형 셀까지 텍스트·로고·복잡한 modifier를 모두 만들면 정보량보다 비용이 커집니다. 작은 셀의 콘텐츠를 숨기는 적응형 정책을 기본으로 사용하세요.
데이터 트리는 불변으로 유지하고, 변경된 데이터만 새 트리로 교체합니다. HeatmapNode ID는 안정적으로 유지하며 매 프레임 정렬·매핑을 수행하지 마세요. 실제 목표 기기에서 benchmark 모듈과 앱 데모를 함께 측정해 레이아웃, Compose 재구성, 이미지 로딩을 구분해 분석합니다.
집계 항목에서 원본 열기
toDisplayTreeWithSources()는 표시 트리와 aggregatedSources를 함께 제공합니다.
키는 root를 제외한 HeatmapPath이며 값은 Others에 포함된 원본 직계 자식입니다.
이 매핑으로 앱의 목록이나 상세 화면을 열 수 있습니다. 기존 toDisplayTree()는 그대로
사용할 수 있습니다. maximumChildren은 유지할 항목 수이며 Others는 추가로 표시됩니다.
합성 ID를 해석하거나 저장하지 말고 반환된 경로 매핑을 사용하세요.
노드의 layoutValue와 effectiveMetric은 생성할 때 계산하여 재사용합니다. 전달한
children 리스트를 수정하지 말고 copy(children = ...)로 새 노드를 만드세요.
val display = raw.toDisplayTreeWithSources(
aggregation = HeatmapAggregation(maximumChildren = 12, othersLabel = "기타"),
)
val state = rememberHeatmapState(display.root)
Heatmap(state = state, onLeafClick = {
state.selectionPath?.let { path ->
display.aggregatedSources[path]?.let { originals -> showItems(originals) }
}
})