chore(조사): 요구 316 — 수치지형도 고르면 B05 느림(도엽 등고선 통째 그리기 · 지반고 서버 묻기)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# 요구 316 B05 평면 분석 지형 「수치지형도」 고름 때 조작 느림 — 원인 조사 (측정 · 코드 고침 없음)
|
||||
|
||||
- 코드 기준 = `main_laptop_1` `1ec0f12fa` · 측정 = `sub_laptop_6`(받기 뒤 `c4c93ec3c`) · 서버 8008 · 5181 · 프로젝트 `검증_sub6`(노선 1,080 m · 노드 27 · 설계 지형 라이다).
|
||||
- 도구 = Playwright 머리 없는 크롬(지속 프로필) · 1600×1000 · DPR 1 · 2 · 같은 조작을 라이다 → 수치지형도 → 라이다 차례로. 스크립트 · 원자료 = `C:/Aislo_wt/sub_laptop_6/tmp/req316/`.
|
||||
- 새 문맥(지속 프로필 아님)은 36.8 MB 도엽 등고선이 HTTP 보관 실패(`ERR_CACHE_WRITE_FAILURE`)로 비어 수치지형도에 등고선이 아예 안 그려짐 → 차이가 안 보임. 실제 브라우저와 같게 지속 프로필로 잼.
|
||||
|
||||
## 0. 결론
|
||||
|
||||
1. **주범 = 도엽 등고선 그리기.** 수치지형도를 고르면 등고선이 도엽 사본 통째(4,200 가닥 · 꼭짓점 145만 · 36.8 MB · 약 6.7×8.3 km)에서 나옴 → 프레임마다 등고선 꼭짓점 6.5~6.8만(라이다 0.2~0.7만 · **10~31 배**) · 그중 **87~93 % 는 노선 띠(300 m) 밖**이라 잘려 안 보이는 헛일.
|
||||
2. 그래서 끌기 · 확대 한 번당 그리기 JS **1.8~3 배**(맞춤 2.1~2.8 → 3.4~5.0 ms · 확대 8칸 1.6~2.0 → 4.6~6.0 ms). CPU 4배 느린 PC 흉내 = 라이다 7~9 ms(60 fps 안) 대 수치지형도 **15~21 ms · 프레임 p90 21~25 ms** → 60 fps 못 지킴 = 「느려짐」 재현.
|
||||
3. **둘째 = 지반고 서버 왕복.** 브라우저는 설계 지형(라이다) 격자만 받아 둠 → 수치지형도는 고칠 때마다 `POST /route/elevations` · 지반 단계 1~3 ms → 60~170 ms · 놓은 뒤 종단 · 횡단 · 절/성토선 갱신 망 지연 흉내 128 → 259 ms(2 배).
|
||||
4. 격자 크기(189만 칸 · 라이다 50만 칸의 3.8 배)는 서버 비용으로 거의 안 드러남(열기 46 ms · 8,000점 2.6 ms). 메모리 · 요청 수 · 누름 비용도 두 지형 비슷 — 도엽 등고선 36.8 MB 는 두 지형 모두 열 때 받음(그것도 두 번).
|
||||
5. 고칠 길 = ① 도엽 등고선을 편집 창 준비 때 노선 띠로 잘라 둠(작음 · 첫손) → ② 수치지형도 격자도 브라우저로 받음(중간 · 7.8 MB 더 받기 = 사용자 결정) → ③ 공용 선 그리기에 화면 밖 구간 건너뛰기(중간 · B04 지도 · 배수유역도 함께).
|
||||
|
||||
## 1. 고르기 길 (코드)
|
||||
|
||||
| 단계 | 하는 일 | 근거 |
|
||||
|---|---|---|
|
||||
| 고를 수 있나 | 라이다 확정값 + `dtm_sheet_*.npz` 둘 다 있으면 고르기 보임 | `common_util/common_util_surface_confirmation.py:110-116` · `B05_Profile/B05_Profile_Router_Terrain.py:118` |
|
||||
| 고름 | 화면 취향(`routeedit-terrain` · 계정 ui-prefs 로 올라감)만 씀 · 초안에 `terrain` 붙여 계산 묶음 다시 돎 · DB 설계값 · 정본 안 바뀜 | `B05_Profile/B05_Profile_Api_Replan.ts:50` · `B05_Profile_UI_RouteEdit.ts:675-686` · `A00_Common/design/design_pipeline_page.ts:642` |
|
||||
| 등고선 | 라이다 = 확정 모델 LAS 등고선(5 m 만) · 수치지형도 = 도엽 컬렉션 통째 `prepareLayer` | `B05_Profile_UI_RouteEdit.ts:647-650` · `B05_Profile_UI_RouteEdit_Contour.ts:101` |
|
||||
| 그리기 | 노선 둘레 300 m 사각형 `clip()` 뒤 가닥마다 bbox 만 보고 보이면 **꼭짓점 전부** 그림(구간 컬링 없음) | `B05_Profile_UI_RouteEdit_Render.ts:177-183 · :211` · `B04_PreProcess/B04_PreProcess_UI_MapRender.ts:357-382 · :427 · :510-524` |
|
||||
| 간격 고르기 | 매 프레임 4,200 가닥 × 배수 최대 7 번 훑기 | `B04_PreProcess_UI_MapRender.ts:481-503` · `B05_Profile_UI_RouteEdit.ts:310-311` |
|
||||
| 지반 표본 | 격자 = 설계 지형 것 하나 · 분석 지형 ≠ 설계면 서버(4,000점씩 쪼갬) | `B05_Profile/logic/B05_Profile_Pipeline_RouteGround.ts:127-128 · :170` · `B05_Profile/B05_Profile_Api_TerrainGrid.ts:39-50 · :89-103` · `B05_Profile_Router_Terrain.py:148 · :166` |
|
||||
| 기울기 · 거리 재기 | 같은 조건으로 서버 길 | `B05_Profile_Api_Replan.ts:226-237` |
|
||||
|
||||
## 2. 수치 표 (라이다 · 수치지형도)
|
||||
|
||||
| 항목 | 라이다 | 수치지형도 | 배 |
|
||||
|---|---|---|---|
|
||||
| DTM 격자 | 835×601 = 50만 칸 · 1.08 m | 1836×1030 = 189만 칸 · 1.0 m | 3.8 |
|
||||
| 브라우저가 받는 격자 | 2.08 MB(설계 지형 · 보관함) | 안 받음(7.8 MB 짜리) → 서버 표본 | — |
|
||||
| 등고선 자료 | LAS 1 m json 7.0 MB → 5 m 만 | 도엽 GeoJSON 36.8 MB · 4,200 가닥 · 꼭짓점 145만 | — |
|
||||
| 프레임당 등고선 꼭짓점(맞춤) | 7.0천 | 68.2천 · 띠 밖 87 % · 화면 밖 90 % | 9.7 |
|
||||
| 〃 (확대 8칸) | 2.1천 | 64.7천 · 띠 밖 93 % · 화면 밖 49 % | 31 |
|
||||
| 프레임당 lineTo · stroke · 글 | 13.7천 · 562 · 185 | 74.0천 · 341 · 16 | 5.4 |
|
||||
| 끌기(지도 이동) 움직임당 JS · 맞춤 | 2.1~2.8 ms | 3.4~5.0 ms | 1.8 |
|
||||
| 〃 확대 8칸 | 1.6~2.0 ms | 4.6~6.0 ms | 3.0 |
|
||||
| 확대 휠 한 칸 JS | 2.1 ms | 4.9 ms | 2.4 |
|
||||
| 끌기 61번 CPU 프로파일 `drawLineParts` · `lineTo` | 19 · 13 ms | 130 · 57 ms | 6.8 · 4.4 |
|
||||
| 끌기 60 프레임 추적 · 렌더러 주 스레드 · GPU | 472 · 892 ms | 529 · 979 ms | 1.1 |
|
||||
| CPU 4배 느리게 · 움직임당 JS(맞춤 · 확대 8칸) | 9.3 · 7.4 ms | 15.2 · 21.0 ms | 1.6 · 2.8 |
|
||||
| 〃 프레임 간격 p50 / p90(확대 8칸) | 8.3 / 12.5 ms | 20.8 / 25.0 ms | — |
|
||||
| 노드 누름 pointerdown | 3.2~6.7 ms | 7.8 ms | ≈1.2 |
|
||||
| 노드 끌기 움직임당 JS | 8.3~9.3 ms | 10.6 ms | 1.2 |
|
||||
| 놓은 뒤 계산 묶음 끝(이 PC 서버) | 106~143 ms | 157~251 ms | 1.5 |
|
||||
| 〃 망 흉내(왕복 40 ms · 올림 10 Mbps) | 128~130 ms | 259 ms | 2.0 |
|
||||
| 지반 단계(ground) | 1~3 ms | 60~70 ms(흉내 170) | 30~ |
|
||||
| 고칠 때 지반 요청 | 0 | POST 1 · 올림 124 KB · 받음 53 KB | — |
|
||||
| 지형 바꿈 → 묶음 끝 | 122~172 ms(라이다로) | 257~274 ms(흉내 451) · POST 2(올림 148 + 65 KB) | — |
|
||||
| JS 힙(어림) | 170~390 MB | 200~300 MB | ≈1 |
|
||||
| 서버 격자 열기 · 8,000점 표본 | 17 · 2.2 ms | 46 · 2.6 ms | — |
|
||||
| 열 때(두 지형 같음) | 도엽 등고선 36.8 MB **두 번** 받기 · 긴 작업 6 번 948 ms(최대 372 ms) | 〃 | — |
|
||||
|
||||
- 머리 없는 크롬 · 이 랩탑에선 맞춤 화면 프레임 떨어짐 없음(60/60) — JS 그리기 비용 차이가 CPU 느린 PC · 확대 화면에서 16.7 ms 를 넘김.
|
||||
- DPR 2 도 JS 시간은 DPR 1 과 같음(래스터는 GPU 쪽 · 추적에서 두 지형 차 10~12 %).
|
||||
|
||||
## 3. 느림의 자리 (순위)
|
||||
|
||||
| 순위 | 자리 | 수치 | 근거 |
|
||||
|---|---|---|---|
|
||||
| 1 | 도엽 등고선을 통째로 · 꼭짓점 전부 그림 — 띠 `clip()` 은 픽셀만 가림 | 프레임당 꼭짓점 10~31 배 · 그리기 JS 1.8~3 배 · 느린 PC 프레임 21~25 ms | `B05_Profile_UI_RouteEdit_Contour.ts:101` · `B05_Profile_UI_RouteEdit_Render.ts:177-183 · :211` · `B04_PreProcess_UI_MapRender.ts:357-382 · :510-524` |
|
||||
| 2 | 분석 지형 격자 없음 → 고칠 때마다 서버 지반 표본(기울기 · 거리 재기도) | 지반 단계 60~170 ms + 왕복 · 갱신 2 배 늦음 | `B05_Profile_Pipeline_RouteGround.ts:127-128 · :170` · `B05_Profile_Api_TerrainGrid.ts:39-50` · `B05_Profile_Router_Terrain.py:148 · :166` · `B05_Profile_Api_Replan.ts:226-237` |
|
||||
| 3 | 열 때 도엽 등고선 36.8 MB 를 배수유역 판 · 편집 창이 함께 받음(받는 중 약속 공유 없음) — 두 지형 공통 | 받기 2 번 · 긴 작업 948 ms | `B05_Profile_UI_Drainage_Panel.ts:448` · `B05_Profile_UI_RouteEdit.ts:608` · `A00_Common/b_asset_cache.ts:289-300` |
|
||||
| 4 | 등고선 간격 고르기가 매 프레임 4,200 가닥 훑음 | 끌기 61번에 4 ms(작음) | `B04_PreProcess_UI_MapRender.ts:481-503` |
|
||||
|
||||
## 4. 고칠 길
|
||||
|
||||
| 길 | 하는 일 | 크기 · 위험 | 기대 |
|
||||
|---|---|---|---|
|
||||
| ① 띠로 잘라 두기 | 수치지형도 등고선을 편집 창 준비 때 노선 bbox + 여유(띠 300 m 보다 넓게)로 잘라 `prepareLayer` · 노선이 여유 밖으로 나가면 다시 자름 | 작음 · `B05_Profile_UI_RouteEdit_Contour.ts` 한 곳 + 시험 · 화면 변화 없음(띠 밖은 이미 안 보임) | 꼭짓점 87~93 % 줄어 라이다 수준 |
|
||||
| ② 수치지형도 격자도 받기 | `terrain-sources` 가 분석 지형 격자 자리도 내고 ground · cross · 기울기 · 재기가 고른 지형 격자를 씀 | 중간 · `B05_Profile_Router_Terrain.py` · `B05_Profile_Api_TerrainGrid.ts` · `B05_Profile_Pipeline_RouteGround.ts` · `B05_Profile_Api_Replan.ts` · 첫 받기 7.8 MB(보관함) · 메모리 +15 MB | 지반 단계 60~170 → 1~3 ms · 서버 왕복 0 |
|
||||
| ③ 화면 밖 구간 건너뛰기 | 공용 `drawLineParts` 가 화면 밖으로 이어지는 구간을 한 점으로 줄임 | 중간 · 공용(B04 지도 · 배수유역도 함께 빨라짐 · 시험 범위 넓음) | 확대 화면 꼭짓점 절반(화면 밖 49 %) 줄임 |
|
||||
| 덤 | 같은 주소 받는 중이면 약속 공유 · 서버 도엽 사본 범위 좁힘 | 작음 · 서버 사본은 배수유역도 범위와 얽힘 | 열 때 36.8 MB × 2 → × 1 이하 |
|
||||
|
||||
사용자 결정:
|
||||
- ② 수치지형도 격자 7.8 MB 를 프로젝트마다 더 받아 둘지(받기 · 메모리 대 끌기 뒤 반응).
|
||||
- 덤의 서버 도엽 사본 범위 — 배수유역도가 같은 사본을 쓰므로 범위를 줄이면 배수유역 화면이 바뀜.
|
||||
- ① 의 여유폭(예: 띠 300 m 의 두 배) — 노선을 크게 옮길 때 다시 자르는 빈도와 맞바꿈.
|
||||
|
||||
## 5. 측정 중 본 것 (속도 밖 · 따로 볼 일)
|
||||
|
||||
- 수치지형도 고른 상태에서 노드 끌기 뒤 **Ctrl+Z 가 안 되돌림**(4번 재현 · 계산 차례도 안 돎 · 라이다는 됨) — 사진첩 길 `B05_Profile_UI_RouteEdit_History.ts:173-179` · `B05_Profile_UI_RouteEdit_Draft.ts:76-86`.
|
||||
- cross 단계의 미교차 넓힘이 분석 지형과 상관없이 설계(라이다) 격자를 씀 → 수치지형도 분석 때 지형 섞임 — `B06_Section/logic/B06_Section_Cross_Stage.ts:140` · `design_pipeline_page.ts:259`.
|
||||
|
||||
## 6. 뒷정리
|
||||
|
||||
- 코드 · git 안 고침 · `sub_laptop_6` git status 빈 채(받기로 dev 합류 · 그 폴더 push 안 함 — 원격보다 앞섬).
|
||||
- 저장 · 확정 · 초기화 안 누름 · ORCA 탭 · 8000 · 5173 안 만짐 · 서버 8008 · 5181 켜 둠.
|
||||
- 계정 화면 취향(`PUT /ui-prefs` · 화면이 스스로 올림) — `검증_sub6` 두 키 되돌림 확인(분석 지형 키 지움 · 보기 = 13:15 사본 값).
|
||||
- `storage/…/8b98ca75…/_derived/haul` 2 벌이 열 때마다 새로 쓰임(앱 자체 · KEEP 2 · 지워도 다시 셈) — 첫 측정 전 벌은 백업 없음 · 그 밖 storage 차이 0.
|
||||
- `tmp/req316/profile`(106 MB · git 밖) 남김.
|
||||
Reference in New Issue
Block a user