@hatiolab/figure-model 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/asset-types.d.ts +6 -0
- package/dist/asset-types.d.ts.map +1 -1
- package/dist/asset-types.js.map +1 -1
- package/dist/authoring-actions.d.ts +39 -0
- package/dist/authoring-actions.d.ts.map +1 -1
- package/dist/authoring-actions.js +116 -8
- package/dist/authoring-actions.js.map +1 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +88 -11
- package/dist/capabilities.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kernel-version.d.ts +1 -1
- package/dist/kernel-version.js +1 -1
- package/dist/proposal.d.ts +1 -1
- package/dist/proposal.d.ts.map +1 -1
- package/dist/proposal.js +8 -0
- package/dist/proposal.js.map +1 -1
- package/dist/release-contract.d.ts +1 -1
- package/dist/release-contract.d.ts.map +1 -1
- package/dist/release-contract.js +76 -4
- package/dist/release-contract.js.map +1 -1
- package/dist/slot-layout.d.ts +257 -0
- package/dist/slot-layout.d.ts.map +1 -0
- package/dist/slot-layout.js +480 -0
- package/dist/slot-layout.js.map +1 -0
- package/dist/slot-places.d.ts +55 -0
- package/dist/slot-places.d.ts.map +1 -0
- package/dist/slot-places.js +45 -0
- package/dist/slot-places.js.map +1 -0
- package/docs/modeller-interaction-performance-2026-10-07.md +60 -0
- package/package.json +2 -1
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 모델러 선택·값 변경 성능 측정 (2026-10-07)
|
|
2
|
+
|
|
3
|
+
결정 정본: [ADR-0119](../../operato-application/adr/ADR-0119.md) (안건).
|
|
4
|
+
이 문서는 측정 원자료와 실행 상태를 둔다. 예정 효과를 성과로 적지 않는다.
|
|
5
|
+
|
|
6
|
+
## 대상과 방법
|
|
7
|
+
|
|
8
|
+
- 대상: 지게차 Figure(부품 504개, joint 다수, 소스 112 KB), operato-figure :3300 모델러.
|
|
9
|
+
- 브라우저 측정: Long Task / Long Animation Frame 관찰자, 세션 메서드와 Lit 렌더를 감싼 시간 합산. 정상 상태는 같은 조작을 세 번 해서 읽는다. 콜드 첫 선택은 따로 적는다.
|
|
10
|
+
- 횟수 측정: `work-counter.ts`(`measureFigureWork`)가 전체 컴파일과 평가를 센다. 시간과 달리 머신과 부하에 흔들리지 않는다. 예산 시험은 `editor-workspace.test.ts`의 「interaction budgets」.
|
|
11
|
+
- 시간(ms)은 10-05 `A/A` 변동 때문에 후보를 가르는 근거로 쓰지 않는다. 횟수로 가르고, 시간은 사용자가 느끼는 크기를 보이는 용도로만 쓴다.
|
|
12
|
+
|
|
13
|
+
## 결과 (브라우저, 정상 상태)
|
|
14
|
+
|
|
15
|
+
| 조작 | 시작 | 지금 |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| 파트 클릭 | 2.1초, 첫 클릭 10.5초 | 클릭 처리 약 90 ms, 150 ms 뒤 미리보기 약 100 ms. 콜드 첫 선택 약 230 ms |
|
|
18
|
+
| 값 변경 확정 | 약 970 ms | 약 230 ms. 이어서 늦춘 작업 셋이 각각 별도 작업으로 약 110·약 100·약 70~100 ms |
|
|
19
|
+
|
|
20
|
+
값 변경 확정 프레임 약 230 ms의 구성: `command` 약 100 ms(커널), `figure-links` 첫 렌더 약 50 ms, `figure-editor` 렌더 약 33 ms.
|
|
21
|
+
`figure-links` 쪽은 옵션 504개 DOM 때문으로 추정하지만 확인하지 않았다.
|
|
22
|
+
|
|
23
|
+
## 결과 (횟수, 워크스페이스, 한 번에 일어나는 전체 컴파일)
|
|
24
|
+
|
|
25
|
+
| 조작 | 시작 | 지금 | 예산 시험 |
|
|
26
|
+
| --- | --- | --- | --- |
|
|
27
|
+
| 열기 | 9 | 3 | ≤ 3 |
|
|
28
|
+
| 값 변경 + 읽기 + dirty | 12(시험 도형에서 27까지) | 4 | ≤ 4 |
|
|
29
|
+
| 소스 텍스트(export) | 3 | 1 | ≤ 1 |
|
|
30
|
+
| 다시 읽기 | 매번 전체 | 0 | 0 |
|
|
31
|
+
|
|
32
|
+
시작값은 수정 전 코드에 같은 예산 시험을 돌린 값이다(열기 9, 값 변경 27, undo+redo 31). 값 변경 12는 지게차 한 명령의 호출 스택 분해다.
|
|
33
|
+
|
|
34
|
+
## compileAsset 한 번의 구성 (지게차, node, 10회 평균, 약 21.8 ms)
|
|
35
|
+
|
|
36
|
+
| 단계 | ms |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| jsonOnly | 1.0 |
|
|
39
|
+
| stringify · 크기 · 필드 | 0.2 |
|
|
40
|
+
| structuredClone | 0.4 |
|
|
41
|
+
| compileDocument | 약 3.0 |
|
|
42
|
+
| 저장 입력 evaluate | 0.5 |
|
|
43
|
+
| **자산 검증(나머지)** | **약 16.6** |
|
|
44
|
+
|
|
45
|
+
CPU 프로파일 포함 시간(compileAsset 272 ms 안): `checkFigureJoints` 189 ms(69 %) → `rewriteJoints` 177 → `writeJoint` 130 → `dropIfUnused` 118 → `stringsIn` 103(자체 시간 1위, 26 %).
|
|
46
|
+
|
|
47
|
+
- 평가는 컴파일 비용이 아니다(0.5 ms).
|
|
48
|
+
- 비용은 ADR-0093의 「joint 기록으로 노드를 다시 만들어 보유한 노드와 대조」에 있다. joint마다 `writeJoint`를 되풀이하고, `dropIfUnused`가 호출마다 `stringsIn`으로 occupancy·capabilities·joints 전체의 문자열을 새로 모아 joint 수에 제곱으로 늘어난다.
|
|
49
|
+
- `stringsIn`을 배열 할당 없는 순회로 바꿨다(figure-model 8085989). 컴파일 중앙값 23.47 → 18.25 ms(−22 %, 최솟값 22.6 → 15.7 ms), 시험 806건 통과. 계약 변화 없음. 복사본에서 먼저 쟀을 때는 20.56 → 14.98 ms(−27 %)였고, 이 머신은 변동이 커서 중앙값으로 읽는다.
|
|
50
|
+
- `dropIfUnused` 재귀가 `declared` 집합을 공유하게 하는 시도는 효과가 없었다(15.16 ms). 재귀가 얕다.
|
|
51
|
+
- 수정 뒤에도 `checkFigureJoints`가 61 %로 남는다.
|
|
52
|
+
|
|
53
|
+
## 실행 상태
|
|
54
|
+
|
|
55
|
+
| 항목 | 상태 |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| 워크스페이스 파생 기억·횟수 계측·예산 시험 | figure-model 0.4.1 발행 |
|
|
58
|
+
| 화면 쪽 정리(파싱 1회, `view.geometry` 심기, 미리보기·검사 디바운스, 안 보이는 패널 건너뛰기) | things-factory v10 커밋 둘, 미발행 |
|
|
59
|
+
| `stringsIn` 비할당 순회 | figure-model 8085989 커밋(시험 806 통과), 미발행 |
|
|
60
|
+
| joint 대조 줄이기, 컴파일 결과 기억 | ADR-0119 안건, 미결정 |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hatiolab/figure-model",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.3",
|
|
4
4
|
"description": "The figure format (figure-asset-1): a kernel that evaluates a figure from its declared relations, the authoring commands a modeller and an AI share, the release gate and the score.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"figure",
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"build": "tsc -p tsconfig.build.json",
|
|
50
50
|
"check": "tsc -p tsconfig.json --noEmit",
|
|
51
51
|
"test": "npm run check && node --test src/*.test.ts",
|
|
52
|
+
"test:coverage:slot-layout": "node --test --experimental-test-coverage --test-coverage-include=src/slot-layout.ts --test-coverage-include=src/slot-places.ts --test-coverage-lines=100 --test-coverage-branches=95 --test-coverage-functions=95 src/slot-layout.test.ts src/slot-places.test.ts",
|
|
52
53
|
"test:rewrite": "node --test scripts/*.test.ts",
|
|
53
54
|
"test:released": "node --test scripts/released-kernel.check.ts",
|
|
54
55
|
"test:coverage": "node --test --experimental-test-coverage --test-coverage-lines=100 --test-coverage-branches=95 --test-coverage-functions=100 src/*.test.ts",
|