diff --git a/docs/raw/조사/2026-10-16_340_계산시간_측정.md b/docs/raw/조사/2026-10-16_340_계산시간_측정.md new file mode 100644 index 000000000..63a9d4612 --- /dev/null +++ b/docs/raw/조사/2026-10-16_340_계산시간_측정.md @@ -0,0 +1,224 @@ +# 340 계산 시간 측정 — 파일 입력 · 전처리 → 계획노선 · 종단 · 횡단 · 유토곡선 · 배수유역 (요구 230 · 10-16) + +- 목적: 계획노선 값을 종단 · 횡단 · 유토곡선 · 배수유역과 실시간 연동하는 검토 앞 자료 · 코드 수정 없음. +- 조건: 랩탑 · localhost(회선 시간 없음) · vite 개발 서버(배포 묶음보다 첫 열기 느림) · 같은 단계 ±20% 흔들림 · 서버 = sub1(8001 · 검증_sub1) · 화면 = sub2(5177 · 8004 · 검증_sub2) · 무거운 측정은 차례로. +- 자료: LAS 1,589 MB · 점 4,900만 · TIF 45.8 MB · 노선 약 1.08 km · 측점 55~66 · 관 11 · 세부 유역 11~22 · 배수유역 격자 1 m(1095×1235). +- 메인 서버 지난 기록(23번): 노선 [확인] 중앙 89.7 s 중 배수유역 분석 72.5 s — 이번 값과 같은 결론. + +## 1. 한 번 도는 것 — 파일 입력 · 전처리 · 자동설계 + +| 단계 | 계산 자리 | 처음 | 다시 | 화면에 보이기까지 | 비고 | +| --- | --- | --- | --- | --- | --- | +| 파일 지문(해시) | 브라우저 | 0.04 s | — | 즉시 | 파일 크기와 무관(앞 · 가운데 · 끝 24 MB만 읽음) | +| 파일 올리기(1.6 GB) | 서버 | 24 s(세션 0.35 · 조각 11.2 · 합치기 12.8) | 0 s(같은 파일 생략) | 회선이 좌우 — 100 Mbps 면 약 2분 10초 + 합치기 13 s | localhost 값 | +| **전처리 합계** | 서버 | **246 s** | 44 s | 진행 조회 5초마다 | | +| ├ 점군 구조화 | 서버 | 100 s | 7 s | | | +| ├ 지면 필터 | 서버 | 19 s | 0 s | | | +| ├ 지표면 모델(DTM 두 벌) | 서버 | 55 s | 0 s | | | +| ├ 지도 받기(VWorld 셋 · 벡터) | 서버(외부) | 23 s | 0 s | | | +| ├ 도엽 합치기 | 서버 | 11 s | 0 s | | | +| └ 도엽 등고선 3D 면 | 서버 | 38 s | **37 s** | | 저장본 없음 — 매번 다시 | +| **자동설계 합계** | 서버 | **74 s** | 10 s | 진행 조회 3초마다 | 다시 = 배수유역 저장본 씀 | +| ├ 계획노선 풀기 | 서버 | 3.9 s | 2.6 s | | | +| ├ 배수유역 · 관 · 측점 | 서버 | 55.8 s | 1.8 s | | 배수유역 분석 53.8 s | +| ├ 횡단 확정(면적 · 유토곡선 포함) | 서버 | 9.8 s | 2.7 s | | | +| ├ 3D 길 모형 짓기 | 서버 | 1.9 s | 1.0 s | | | +| └ 추천 노선 미리 셈(뒤에서) | 서버 | 52 s | 1.3 s | 화면 안 막음 | | +| B04 전처리 화면 첫 열기 | 화면 | — | — | 3.8~4.0 s | 113 MB 받음 · 캐시 있어도 다시 받음 | +| B05 종단 화면 첫 열기 | 화면 | — | — | 3.0 s(캐시 없음) · 2.1 s(있음) | | +| B06 횡단 화면 첫 열기 | 화면 | — | — | 3.8 s | | + +## 2. 계획노선 · 종단 · 횡단 · 유토곡선 · 배수유역 조작 — 화면에 보이기까지 + +| 조작 | 브라우저 계산 | 서버 | 합계(그리기 포함) | 판정 | +| --- | --- | --- | --- | --- | +| 노선 점 끌기(움직이는 동안) | 3~5 ms | 없음 | 3~5 ms | 즉시 | +| 노선 점 놓기(높이 띠) | 1~2 ms | 0.07 s | 약 0.05 s | 즉시 | +| 노선 편집 창 열기 | 0.33~0.41 s | 0.45 s | 0.54 s | 1초 안 | +| **노선 [확인]**(종단 · 배수유역 · 관 · 측점 · 횡단 다시) | — | **76 s**(배수유역 60 s · 나머지 약 10 s) | 76 s + 화면 다시 열기 2~3 s | 수십 초 | +| 계획고 ▲▼ 한 번 → 종단 · 전 측점 횡단 | 0.07 s | 없음 | 0.06 s(종단 보기) · 0.21 s(횡단 보기) | 즉시 | +| 계획고 연달아 다섯 번 | 0.25 s | 없음 | 마지막 누름 뒤 약 0.17 s | 즉시 | +| 유토곡선 계산 | 0.0004 s | 유토 배분 0.13 s(처음 0.75 s) | 0.4 s 기다림 + 0.13 s | 1초 안 | +| 횡단 고침(측구 종류 등) | 0~0.07 s | 없음 | 0.07 s | 즉시 | +| [전체 측점 반영] | 측점당 약 0.06 s | 없음 | 4.1 s(측점 66) | 수 초 | +| 종단 → 횡단 / 횡단 → 종단 보기 | 0.54 s / 0.15 s | 0.72 s / 0.21 s | 0.74 s / 0.22 s | 1초 안 | +| 측점 고르기 · 고침 | 0~1 ms | 없음 | 0.04~0.05 s | 즉시 | +| 3D 길 모형 다시 짓기 | 1.6~2.0 s(화면 멈춤) | 처음만 올림 2.2 s | 1.9 s | 수 초 | +| 배수유역 관 더함 · 옮김 · 지움(세부 유역 다시 나눔) | 0 | 0.20~0.28 s | 0.24 s | 1초 안 | +| **배수유역 큰 계산**(노선이 바뀌면) | — | **60 s**(격자 넓히기 10번이 95%) | 60 s | 수십 초 | +| 횡단 [확정](면적 · 유토곡선 서버 다시 셈) | — | 2.2 s(유토곡선 0.2 s) | 2.2 s | 수 초 | + +## 3. 읽을 거리 + +- 즉시(0.1 s 안): 노선 점 끌기 · 계획고 · 횡단 고침 · 유토곡선 계산 — 브라우저 계산이라 지금도 실시간. +- 막는 것 하나 = 배수유역 큰 계산 60 s — 노선 [확인] 76 s 중 60 s · 그 안은 격자 넓히기 10번(흐름 방향 다시 만듦 30 s · 도로 닿음 판정 22 s). +- 배수유역을 빼면 노선이 바뀐 뒤 서버 계산 약 6~10 s(노선 풀기 2~4 · 측점 1.5 · 횡단 확정 2~3). +- 수 초짜리: 3D 길 모형 1.9 s(화면 멈춤) · [전체 측점 반영] 4.1 s · 첫 화면 열기 2~4 s. +- 지금 노선은 [확인] 때만 종단 · 횡단 · 배수유역으로 넘어감 · 계획고는 배수유역에 안 닿음. +- 전처리는 파일 올릴 때 한 번(처음 약 4분) · 도엽 등고선 3D 면 37 s 는 저장본 없이 매번. + +## 4. 관찰(고치지 않음) + +- 검증_sub2 에서 유토곡선이 「다시 계산하는 중」에 머물러 계획고를 바꿔도 곡선이 안 바뀜 — 같은 입력으로 계산을 직접 부르면 정상 · 원인 미확인. +- B04 화면은 캐시가 있어도 113 MB 를 매번 다시 받음(B05 는 56 MB → 0.5 MB). +- B05 첫 열기(캐시 없음) 때 세부 유역 요청 11번이 한꺼번에 나감. +- 노선 점 놓기 때 단면 띠 · 횡단 미리보기 요청이 안 나감(그 칸이 닫혀 있던 탓으로 보임). + +--- + +## 부록 A — 서버 원표(sub1) + +- 측정일 2026-10-16 · 랩탑(다른 창 병행 중 — 같은 단계도 ±20% 흔들림) +- 방법: API 는 로그인 쿠키로 직접 호출(localhost · 시간 = 요청~응답 끝) · 서버 내부는 [계측] 줄 · 자동설계 체인과 전처리는 같은 서버 코드를 별도 프로세스에서 불러 단계마다 시간 잼(코드 수정 없음 · `tmp/340/harness.py`) +- 중앙값 = 이번 측정 + 자기 `tmp/server.log` 지난 [계측] 줄 · 몇 분 걸리는 단계는 1~3회 +- 자료 원본: `tmp/340/` (api_results.jsonl · harness_results.jsonl · pre.out · chain1.out · chain2.out · all.log) + +### 자료 크기 + +| 항목 | 값 | +| --- | --- | +| LAS | 용화.las 1,589 MB · 49,006,663 점 · 지면점 classification 1,140,716(2.3%) · csf 768,273(1.6%) | +| TIF | 용화.tif 45.8 MB | +| DEM 격자 | dtm_classification 645×896 · smooth 601×835 · 도엽 서피스 1030×1836 | +| 노선 | 1,078~1,079 m · 노선 점 181 · 계획노선 노드 28 (계획노선 원본 shp 정점 121 · 2,136 m 중 사용 범위) | +| 측점 | 횡단 55~64 (자동 체인 55 · replan 뒤 64) | +| 배수유역 | 해석 격자 1 m · 최종 1095×1235(셀 697,793) · 확장 10회 · 세부 유역 22 | +| 관 | 11 | + +### 결과 표 + +| 단계 | 계산 자리 | 시간 중앙값 (처음 / 다시) | API 응답 시간 | 응답 크기 | 자료 크기 | 비고 | +| --- | --- | --- | --- | --- | --- | --- | +| **파일 입력** — 업로드 세션 | 서버 Python | 0.35 s | 0.35 s | 286 B | LAS 1,589 MB | 같은 이름 · 같은 지문이면 전송 생략(재업로드는 0 s) | +| 파일 입력 — 청크 전송 | 서버 Python | 11.2 s (1,024 MB 7.3 s + 565 MB 4.0 s) | 청크당 4~7 s | 213 B | 청크 1 GB × 2 | localhost 값 · 실제는 사용자 회선이 좌우(100 Mbps 면 약 2분 10초) | +| 파일 입력 — finalize(병합·메타) | 서버 Python | 12.8 s | 12.8 s | 81 KB | | 미리보기 썸네일 포함 응답 | +| **전처리 B04 Pipeline 총** | 서버 Python (백그라운드) | **246 s / 44 s** | 응답 없음(업로드 뒤 백그라운드) | — | 49 M 점 | 화면은 surface/status 5 s 주기 조회 | +| ├ LAS 구조화(structurize) | 서버 Python | 100 s / 7 s | | | 1.6 GB 읽기 | 처음 중 가장 큼(로그 93.7 s + 마무리) · 다시는 캐시 | +| ├ 지면 필터(classification · csf) | 서버 Python | 19 s / 0 s | | | | csf 계산 4.4 s · 나머지 통계·저장 | +| ├ 지표면 모델(DTM 2벌) | 서버 Python | 55 s / 0 s | | | 645×896 · 601×835 | classification 22 s · csf 32 s(각 그리드 후 마무리가 대부분) | +| ├ VWorld 지도 3종 + GIS 벡터 | 서버 Python (외부 다운로드) | 23 s / 0 s | | | | 위성 7.4 · 하이브리드 8.0 · 백지도 7.1 · 벡터 0.5 s | +| ├ 수치지형도 도엽 병합 | 서버 Python | 11 s / 0 s | | | 도엽 9매 · 등고선 4,200건 | | +| └ 도엽등고선 3D 서피스 | 서버 Python | 38 s / **37 s** | | | 1030×1836 · 등고 106단 | **캐시 없음 — 다시도 매번 37 s**(laplace 31~33 s) | +| **자동설계 체인 총** | 서버 Python + Node | **73.6 s / 10.0 s** | 응답 없음(전처리 뒤 같은 백그라운드) | — | | 화면은 workflow-state 3 s 주기 조회. 다시 = 배수유역 저장분 재사용 | +| ├ 초기 폴리라인 | 서버 Python | 0.04 s | | | 노드 28 | | +| ├ B05 경로 계산(solve · as_planned) | 서버 Python | 3.9 s / 2.6 s | | | 노선 점 181 | | +| ├ B05 경로 확정 | 서버 Python | 0.6 s / 0.5 s | | | | | +| ├ 배수·관·측점 | 서버 Python | **55.8 s / 1.8 s** | | | | 처음 = 배수유역 분석 53.8 s(97%) · 관 0.3 s · 측점 재생성 1.5~1.7 s | +| ├ B06 확정(서버 재계산 포함) | 서버 Python + Node | 9.8 s / 2.7 s | | | 측점 55 | 처음은 확정 저장(트랜잭션) 6.0 s — 첫 행 넣기 | +| ├ 3D 코리도 미리 짓기 | 서버 Node | 1.9 s / 1.0 s | | | | | +| ├ 서버 재계산(면적·유토곡선) | 서버 Node | 1.5 s / 1.3 s | | | | 체인 끝에 한 번 더 부름(B06 확정 안에서 1회 + 끝 1회) | +| ├ 초기값 스냅샷 | 서버 Python | 0 s | | | | 이미 있으면 안 덮음 — 이번엔 건너뜀(첫 업로드 값 못 잼) | +| └ 추천 노선 미리 셈(뒤 · 예약) | 서버 Python | 51.9 s / 1.3 s | | | 알약 5개 | 체인 응답 뒤에 따로 돎 · 같은 입력이면 저장본 | +| **노선 고침 뒤 [확인] 재확정** (route/replan) | 서버 Python + Node | **76.1 s** (63.6 · 72.9 · 79.2 · 83.9) | **73.0 s** (64.0 · 73.0 · 79.9) | 241 B | 노드 28 | 요청 하나가 끝까지 붙잡음 · 화면은 1 s 초시계만(조회 없음) | +| ├ 재계산 준비 | 서버 Python | 0.9 s | | | | 관 삭제 · 노선 읽기 · stage 기록 | +| ├ 노선 재계산(solve) | 서버 Python | 2.0 s | | | | | +| ├ B05 확정 · 설계 이월 | 서버 Python | 0.1 s · 0.9 s | | | | | +| ├ **배수·관·측점 재생성** | 서버 Python | **65 s (91~93%)** | | | | 아래 배수유역 쪼갬 | +| └ B06 확정(서버 재계산 포함) | 서버 Python + Node | 3.1 s | | | | | +| **배수유역 분석**(primary-region refresh) | 서버 Python | **60.3 s** (6회 53.8~74.6) | 58.0 s | 1.27 MB | 격자 1095×1235 · 셀 697,793 | 저장분 읽기는 0.10 s | +| ├ _prepare(도엽 읽기·좌표변환) | 서버 Python | 3.8 s | | | | | +| ├ 1차 영역(resolve_primary_region) | 서버 Python | 2.6 s | | | 셀 268,364 | | +| ├ **격자 확장·흐름 판정** (expand_by_red_boundary) | 서버 Python | **53 s (95%)** | | | 확장 10회 · 셀 268 k → 698 k | 회차당 1.3~7.2 s · 격자가 커지며 늘어남 | +| │ ├ 하강 방향장 다시 만듦 | 서버 Python | 29.6 s (8회 × 3.7 s) | | | | 0·3~9회차는 격자가 넓어져 새로 · 1·2회차만 재사용 | +| │ │ ├ 등고선 굽기(rasterize_contours) | 서버 Python | 9.5 s (8회) | | | | | +| │ │ ├ 밴드별 하강거리(EDT 91~101단) | 서버 Python | 17.8 s (8회) | | | 창 넓힘 15~46회 | 방향장 안 1위 | +| │ │ └ 흐름 경로(_route_by_potential) | 서버 Python | 1.8 s | | | | | +| │ └ 도로 도달 판정(classify_flow) | 서버 Python | 22.3 s (10회 × 1.0~2.7 s) | | | | 셀 수에 비례 | +| ├ 흐름 강도 · 외곽선 · 관 · 화살표 | 서버 Python | 0.2 s | | | | | +| └ 응답 만들기·저장 | 서버 Python | 1.0 s | | | 1.27 MB | | +| 관 지점 확정 (pipe-points PUT) | 서버 Python | 0.3 s | 0.28 s | 104 KB | 관 11 | | +| **B06 [확정]** (sections confirm) | 서버 Python + Node | **2.2 s** (처음 3.9 / 다시 2.0~2.2) · 로그 10회 중앙값 3.1 s | 2.16 s | 104 B | 측점 55~64 | 서버 재계산 1.4~2.6 s 가 66~70% | +| └ 서버 재계산 내부 | 서버 Python + Node | 1.5 s (53회) | | | | 종횡단 상세+DB 0.2 · 포장·세월교 0.1~0.5 · **Node(면적·유토곡선) 0.2 s** · 정본 저장 0.7 s(가장 큼) | +| 유토곡선 (Node 묶음) | 서버 Node | 0.2 s (53회 중앙값 · 처음 0.8~1.6 s) | (B06 확정 안) | | 측점 55~64 | 처음 부를 때 Node 기동 탓 1 s 안팎 더 | +| [초기화] 복원(route/reset · 스냅샷) | 서버 Python | 4.6 s / 12.1 s | 4.6~12.1 s | 123 B | | 재계산 아님 | +| 노선 초기화(route/replan/reset) | 서버 Python + Node | 73.0 s | 73.0 s | 131 B | | replan 과 같은 체인 | + +### 화면이 읽는 조회 API (3회 중앙값 · localhost) + +| API | 응답 시간 | 응답 크기 | 비고 | +| --- | --- | --- | --- | +| surface/status (전처리 진행) | 0.04 s | 190 B | 화면 조회 주기 **5 s** · 최대 360회(30분) | +| workflow-state (체인 진행) | 0.06 s | 12 KB | 화면 조회 주기 **3 s** · 최대 360회(18분) | +| route/latest | 0.13 s | 34.5 KB | | +| route/plan | 0.09 s | 30.3 KB | | +| sections/context · summary | 0.07 · 0.06 s | 2.3 KB · 29.8 KB | | +| sections/{route}/detail | 0.30 s | **1.51 MB** | | +| drainage/primary-region (저장분) | 0.10 s | **1.27 MB** | | +| drainage/pipe-points | 0.20 s | 104 KB | | +| routes/{route}/corridor (3D) | 0.07 s | **15.6 MB** | localhost 라 빠름 · 원격은 회선이 좌우(100 Mbps 면 약 1.3 s) | +| route/structures · surface/confirmed | 0.03 · 0.06 s | 127 B · 408 B | | + +### 읽을 거리 + +- 실시간 따라오기의 벽은 **배수유역 한 덩이(약 60 s)** — [확인] 재확정 76 s 의 90% 이상 · 자동 체인 처음 74 s 의 73%. 그 안은 「격자 확장 10회 × (방향장 다시 만듦 + 도로 도달 판정)」이 95%. +- 배수유역을 빼면 남는 서버 계산은 노선 solve 2~4 s + 측점 재생성 1.5 s + B06 확정 2~3 s(정본 저장 0.7 s · Node 유토곡선 0.2 s) — 저장 단계 기준 약 6~10 s. +- 전처리는 업로드 1회만 — 처음 246 s 중 LAS 구조화 100 s · DTM 55 s · 도엽 서피스 38 s. 도엽 서피스는 캐시가 없어 같은 입력으로 다시 돌려도 37 s. +- 측정 뒤 검증_sub1 은 [초기화] 복원 + 노선 초기화로 처음 상태(노선 1,078.01 m · 수정본 없음)로 되돌림. 스냅샷은 그대로(덮지 않음). +- 실제 재업로드(WF1 + 완료 메일)는 하지 않음 — 같은 파일은 지문으로 전송이 생략되고, 완료 메일이 계정으로 나가므로. 전송은 임시 보관함(곧 지움)으로, 전처리·체인은 같은 서버 코드를 직접 불러 잼. + +## 부록 B — 화면 원표(sub2) + +- 측정일 2026-10-16 · 랩탑 · ORCA 내장 탭 · vite 개발 서버(모듈을 낱개로 받음 — 배포 묶음보다 첫 열기가 느림) +- 자료: 노선 232 · 측점 62~66 · 관 11 · 세부 유역 11 +- 방법: `tmp/340/` 조각(p0 fetch · 긴 작업 · DOM · 캔버스 기록 · rAF→setTimeout · 3D 루프 붙듦 / p1 되풀이 bench / p5 조작) · 원자료 `tmp/340/res/` +- 합계 = 조작부터 마지막 화면 변경(DOM · 캔버스 · 긴 작업 끝)까지 · 빠른 조작은 10번 p50 / p90 · 느린 조작은 3번 중앙값 +- ① 계산 = 주 스레드 긴 작업(50 ms 넘는 덩이) 합 또는 함수 bench · ② 서버 = fetch 시작~몸통 끝 · ③ 그리기 = 캔버스 첫~끝 호출 또는 3D 한 틀(JS 쪽만 · GPU 시간 안 잼) +- 비고 = 0.1 s 안 / 1 s 안 / 1 s 위 + +### 결과 표 + +| 조작 | ① 계산 ms | ② 서버 왕복 ms | ③ 그리기 ms | 합계(보이기까지) | 횟수 | 자료 크기 | 비고 | +| --- | --- | --- | --- | --- | --- | --- | --- | +| **B05 첫 열기 — 캐시 없음** | 1,145 (긴 작업 합 · 모듈 150개 실행 포함) · 3D 지형 parse+맞춤 145 · 등고선 290 | 마지막 응답 2,810 · 요청 30 · **detail-basins POST 11번 겹침(각 0.7~1.1 s)** · 지형 preview 0.8 s | 3D 첫 틀 35~108 | **2,978** | 3 | 56 MB(지형 8 MB · 단면 상세 1.5 MB) | 1 s 위 | +| B05 첫 열기 — 캐시 있음 | 1,141 | 마지막 응답 2,070 · 요청 21 | 3D 첫 틀 35~108 | **2,078** | 3 | 0.5 MB | 1 s 위 | +| B06 첫 열기(세션 비움 · 자산 캐시 있음) | — | — | — | 3,844 | 1 | — | 1 s 위 | +| [확인] 뒤 다시 열기 | 첫 열기와 같음(`location.reload`) | 서버 replan 76 s = sub1 | — | 76 s + 2.1~3.0 s | — | — | 1 s 위 · 서버 sub1 값 | +| 종단 → 횡단 보기 | 537 (긴 작업) | 720 (3요청: 구조 정의 판 · 구조물 · 관 지점) | ①에 포함(카드 SVG 66장) | **737** (p90 1,267) | 10 | — | 1 s 안 | +| 횡단 → 종단 보기 | 153 | 208 (2요청) | ①에 포함 | 219 (p90 251) | 10 | — | 1 s 안 | +| 계획고 ▲▼ 한 번(종단 보기) | 70 (긴 작업) · bench: adjustStation 4.3 · buildAlignment 0.9 · 전 측점 횡단 refreshCrossDesigns 88 | 0 (haul-plan 안 나감 ※1) | ①에 포함 | **61** (p90 134) | 20 | — | 0.1 s 안 | +| 계획고 ▲▼ 한 번(횡단 보기) | 65 | 0 | 카드 다시 그림 포함 | 207 (p90 276) · 대기 120 포함 | 10 | — | 1 s 안 | +| 계획고 연달아 ▲×5(0.1 s 간격) | 250 (긴 작업 3덩이) | 0 · haul-plan 0번 ※1 | ①에 포함 | 573 (누름 간격 400 포함 → 마지막 누름 뒤 ~170) | 3×(▲5 · ▼5) | — | 1 s 안 | +| 횡단 고침(측구 일반 ↔ L형) | 0~67 | 0 | ①에 포함 | **69** (p90 151) | 10 | — | 0.1 s 안 | +| [전체 측점 반영] | 측점마다 차례로(긴 작업 없음 · 측점당 ~60) | 0 | 카드 66장 차례로 | **4,129** | 3 | 측점 66 | 1 s 위 · 세션 비워 되돌림 확인 | +| 측점 고르기(횡단 카드) | 0 | 0 | class 바꿈 | 38 (p90 85) | 10 | — | 0.1 s 안 | +| 측점 고르기(종단 그래프) | 0 | 0 | 종단 전체 다시 그림 | 48 (p90 89) | 10 | — | 0.1 s 안 | +| 측점 고침(불규칙 · 구조물 측점) | buildAlignment 0.9 (p90 1.6) | 0 | 종단 다시 그림 ≈ 48(측점 고르기 값) | ≈ 50 추정 | bench 20 | 표본 1,222 | 0.1 s 안 · 화면 조작은 안 잼(끌기 알약) | +| 유토곡선 열기 / 닫기 | 0 (곡선 고착 ※1) | 0 | 9 | 9 (p90 17) | 10 | — | 0.1 s 안 · 곡선 그리기 없는 값 | +| 유토곡선 계산(함수 직접) | computeMassHaulSeries 두 기준 0.4 · 횡단만 0.0~0.4 | — | SVG 그리기 안 잼 ※1 | — | bench 10 | 측점 66 | 0.1 s 안 | +| haul-plan(유토 배분 · 서버 Node) | — | **125** (처음 753 = Node 기동) | — | 0.4 s 대기 + 125 | 5 | 요청 23 KB · 응답 0.6 KB | 1 s 안 | +| 노선 편집 창 열기 | 330~410 (긴 작업) | 마지막 응답 ~450 (7요청 · route/plan 0.37 s · terrain-sources 0.38 s) | 캔버스 7~12 | **539** (582 · 539 · 449) | 3 | 32 KB | 1 s 안 | +| 노선 점 끌기(이동마다) | 이동 1번 = 계산+캔버스 그리기 동기 3~5 (최대 14) | 0 | ①에 포함(캔버스 775 호출) | **3~5** | 4×20 | 노드 28 | 0.1 s 안 | +| 노선 점 놓기 | 1~2 | elevations 65 (4번 중 1번) · profile-preview · cross-preview 안 나감 ※2 | 캔버스 1~2 | 16~293 (중앙 52) | 4 | 0.8 KB | 0.1 s 안 | +| 3D 업데이트(코리도 다시 지음) | **1,623~2,046 긴 작업 한 덩이**(buildCorridor) | 캐시 있음 0 · 처음은 GET 1.2 s + **PUT 2.2 s(15 MB 올림)** | 3D 첫 틀 52~55 · 다음 1~2 | **1,913** | 3 | 15.6 MB | 1 s 위 | +| 3D 한 틀(지형 + 노선) | — | — | 첫 틀 35 · 다음 0.1~3 | — | 30 | — | JS 쪽만 · GPU 안 잼 | +| 배수유역 관 더함 / 옮김 / 지움 | 0 (관 목록 세션에 담음) | detail-basins POST **196~278** (응답 첫 바이트 160~240) | 캔버스 42~65 | **235** (204 · 235 · 681) | 3 | 응답 103 KB | 1 s 안 · 세 조작 모두 같은 `analyze()` — 「유역 다시 나누기」 버튼으로 잼 | +| 배수유역 — 노선 바뀜 | setRoute 지역 계산(첫 열기 안) | 0 | 캔버스 | 첫 열기 값 | — | — | 노선은 [확인] 뒤 다시 열기 때만 바뀜 · 끄는 동안 연동 없음 | +| 배수유역 — 계획고 바뀜 | 연동 없음 | — | — | — | — | — | 계획고는 배수유역을 안 건드림 | +| B03 지문(합성 8 · 24 · 100 · 500 MB) | 31 · 36 · 39 · 38 (p50) | 0 | — | 31~39 | 각 10 | 읽는 양 늘 24 MB(앞 · 가운데 · 끝 8 MB) | 0.1 s 안 | +| B03 지문(실제 1,589 MB) | ≈ 38 + 디스크에서 24 MB 읽기(SSD 1 GB/s 면 ~25) | 0 | — | **≈ 0.06 s 추정** | — | 1,589 MB | 0.1 s 안 · 같은 방식이라 계산 근거로 | +| B03 조각 올리기 | — | 세션 0.35 s + 조각 11.2 s + finalize 12.8 s = sub1 | 진행 표시 10 s 마다 | sub1 값 | — | 1 GB × 2 | 1 s 위 · 실제 재업로드 안 함 | +| **B04 첫 열기** | 1,012~1,053 (긴 작업 · GLB · PLY parse · 지도 준비) | 마지막 응답 ~3,700 · 요청 27 · geojson 37 MB · 점구름 28 MB · 지형 19 + 8 MB · 등고선 11 + 7 MB | 지도 캔버스 0.15~3.5 s 사이 1,705 호출 · 3D 틀 안 잼(루프 셋 붙듦) | **3,760 / 3,982** (캐시 없음 / 있음) | 3 / 3 | **113 MB(캐시 있어도 같음 ※3)** | 1 s 위 | +| B04 유역 그림 | — | primary-region 301~621 (1.27 MB · 첫 열기 2.2 s 쯤 나감) | 지도 캔버스(첫 열기 안) | 첫 열기 안 | 6 | 1.27 MB | 1 s 안 · 재산정은 서버 60 s = sub1 | +| [저장] · [확정] | — | 서버 B06 확정 2.2 s = sub1 | — | 안 잼 | — | — | 저장해야만 재는 것 | + +### 느린 셋 + +1. **[전체 측점 반영] 4.1 s** — 측점 66개를 하나씩 다시 계산 · 카드 다시 그림(긴 작업은 없음 · 화면은 멈추지 않음). +2. **B04 첫 열기 3.8~4.0 s** — 113 MB 받기가 대부분 · 캐시가 있어도 같은 양을 다시 받음. +3. **B05 첫 열기 3.0 s(캐시 없음) / 2.1 s(있음)** — 캐시 없을 때 배수유역 detail-basins POST 11번 겹침 · 3D 업데이트 1.9 s(코리도 짓기 긴 작업 한 덩이 · 화면 멈춤)가 그다음. + +### 관찰(고치지 않음) + +- ※1 유토곡선이 이 프로젝트에서 열자마자 「횡단을 지금 계획선에 맞춰 다시 계산하는 중입니다」에 머묾 — 종단 · 횡단 두 보기 다. 그래서 계획고를 바꿔도 haul-plan 이 한 번도 안 나감 · 곡선 SVG 를 못 그림. 같은 입력으로 함수를 직접 부르면 낡음 0 · 계산 0.4 ms 로 정상 → 화면 쪽 낡음 판정(편집 반영 계획선 대 측점 설계)이 풀리지 않는 것으로 보임 · 원인 미확인. +- ※2 노선 점 놓기에서 profile-preview · cross-preview 요청이 안 나감(단면 띠 · 횡단 칸이 닫혀 있던 탓으로 보임). +- ※3 B04 는 캐시 있음에도 113 MB 를 매번 받음(B05 는 56 MB → 0.5 MB 로 줆). +- B05 캐시 없는 첫 열기에 detail-basins POST 가 11번 같이 나감(관마다 한 번으로 보임) · 캐시 있으면 0번. +- 3D 업데이트 처음 한 번이 코리도 15 MB 를 서버에 PUT 함(버튼 자체 동작 · 같은 입력이라 같은 내용). + +### 측정 조건 · 되돌림 + +- 조작으로 바꾼 값: 계획고는 같은 수만큼 ▼ · 측구는 원래 「일반」 · [전체 측점 반영]은 세션 비우고 다시 열어 처음 값 확인 · 노선 편집은 [취소] · [저장] 안 누름 · 탭을 닫아 세션도 사라짐. +- 계정 설정: 노선 편집 창이 만든 이 프로젝트 화면 설정 둘(routeedit-terrain · routeedit-view) 지움 · 계정에 다시 올림 · 유토곡선 열림 설정은 처음과 같음 · `frd_current_project_id` 원래 값으로. +- 흠: 탭 목록을 `--worktree` 없이 봐서 탭이 사라진 줄 알고 새로 만듦 — 한때 탭이 여섯까지 쌓임(모두 닫음). 그 사이 B04 앞 세 번은 다른 탭이 캐시를 쥐고 있어 「캐시 없음」이 안 돼 버림(`res/open_b04_invalid_2tabs.jsonl`) · 표의 B04 값은 탭 하나일 때 다시 잰 것. 유토곡선 · 노선 편집 · 지문 · 종단 측점 고르기는 두 번째 탭이 쉬는 동안 잼(3D 루프 붙듦 · CPU 영향 작음). +- `indexedDB` 를 eval 로 지우거나 읽으면 다른 탭이 열려 있을 때 eval 이 막힘 → 조각 `ev.sh` 는 저장소 안만 비우게 바꿈. +- 3D 업데이트 첫 값(합계 1,054)은 긴 작업 끝을 안 세던 판이라 버리고 다시 잼(p0 고침).