perf(B06): 54-22 S1 횡단 보기 ▲▼ 멈춤 되돌림 — 120ms 디바운스 · 종단도 한 번 · 바뀐 카드만

- 횡단 재계산 대기: 횡단 보기 120ms · 종단 보기 16ms 그대로(실시간)
- 계획고 편집 반영 알림을 받은 횡단 보기는 카드만 갈아 끼움 — 종단도는 보낸 쪽이 이미 그림
- 숨은 횡단 보기는 알림 건너뜀 — 다시 보일 때 정합이 카드를 맞춤
- 재계산이 실제 값이 바뀐 측점만 돌려줌 — ▲ 한 번에 66장 전부 갈아 끼우던 것 → 3장
- 실측(sub7_검증 · 66 측점 · 540m ▲): 한 번 최장 577~585 → 58~81ms · 2.5초 길게 누적 1,468 → 236~282ms
- B05 ▲: 50ms 넘는 멈춤 0 · 누른 뒤 55~67ms 반영 · 길게 누름 중 100ms 마다 따라옴

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYJJRCfHfdCGNhmXTjQKV7
This commit is contained in:
2026-10-06 12:38:41 +09:00
co-authored by Claude Opus 5.5
parent c8ca79063c
commit 717c28a956
6 changed files with 105 additions and 9 deletions
+6 -3
View File
@@ -121,7 +121,8 @@ export function createSectionView(
else revealCard(stationId, "smooth");
},
edit: () => structureEdit,
refreshCards: (chainages) => refreshCards(chainages),
// 종단도는 보낸 쪽(계획고 편집 반영)이 이미 다시 그림 — 카드만(54-22)
refreshCards: (chainages) => refreshCards(chainages, false),
},
shared as DesignPageShared,
);
@@ -390,10 +391,12 @@ export function createSectionView(
* 측점마다 `refreshCard` 를 부르면 측점 수만큼 종단 그래프·유토곡선을 다시 그려,
* 계획선 ▲▼ 한 번에 화면이 몇 백 ms 씩 멈췄다(2026-09-12 B05 대비 느림 원인).
*/
const refreshCards = (chainages: ReadonlyArray<number>): void => {
const refreshCards = (chainages: ReadonlyArray<number>, redraw = true): void => {
let touched = false;
for (const chainageM of chainages) if (rebuildCard(chainageM)) touched = true;
if (touched) redrawProfile();
if (!touched || !currentDetail) return;
if (redraw) redrawProfile();
else fillSlopeNotice.update(currentDetail.cross_sections, cachedStationInterval);
};
const resizeObserver = new ResizeObserver(() => {