Skip to content

perf: v0.15 Welle 0 — Quick-Wins (Hot-Path-Allokationen + Typlöcher)#162

Merged
Exoridus merged 1 commit into
mainfrom
feat/v0.15-w0-quick-wins
Jun 23, 2026
Merged

perf: v0.15 Welle 0 — Quick-Wins (Hot-Path-Allokationen + Typlöcher)#162
Exoridus merged 1 commit into
mainfrom
feat/v0.15-w0-quick-wins

Conversation

@Exoridus

Copy link
Copy Markdown
Owner

v0.15 Welle 0 — Quick-Wins

Erster PR des v0.15-Härtungs-Release. Reiner Gewinn: Hot-Path-Mikro-Allokationen entfernt, Typlöcher geschlossen, Doku-Sichtbarkeit präzisiert. Verhaltens-äquivalent — keine öffentlichen Signaturen entfernt/umbenannt; public-API-snapshot-neutral.

Spec: .workspace/specs/v0.15-hardening/01-quick-wins.md

Slices

  1. Polygon.project() inline ohne clone()/map/Spread — allokationsfrei im SAT-Hot-Path (getCollisionSat ruft es 2·(nA+nB)× pro Paar). + Coverage-Test (Projektion, unnormalisierte Achse, result-Reuse).
  2. Container.contains() for-Schleife statt .some(closure) — Hit-Test-Pfad.
  3. _invalidateBoundsCascade bricht am ersten bereits BoundsRect-dirty Vorfahren ab. Invarianz verifiziert (3 Push-Stellen; Subtree markiert abwärts, Cascade aufwärts → disjunkt; einziger Override Sprite ist Blatt). + Korrektheitstest (kein übersprungenes Level).
  4. InputManager.pointers RecordMap — kein Object.values()-Wegwerf-Array pro Frame in updatePointerEvents.
  5. WebGPU-Particle-Uniform direkte Index-Writes statt 44-Element-Array-Literal pro Draw. Byte-identisch.
  6. Typlöcher: Loadable/AssetInput anyunknown; gratuitösen View.updateId-Cast entfernt (+ dadurch redundante Folge-Casts in Loader/SceneNode).
  7. Doku: Collision-Doppelbezeichner in math/index klargestellt; Time.temp/Polygon.temp @internal.

Verifikation (lokale CI-Parität)

  • typecheck (root + 5 Pakete + examples + guides) ✅
  • lint:strict / lint / lint:packages ✅ · format:check ✅
  • test: 3392 passed, 1 skip, 0 fail ✅
  • docs:api:check in-sync (time.mdx/polygon.mdx für @internal regeneriert) ✅

WebGPU-Particle-Browser-Tests (headed) lokal nicht gelaufen; Slice 5 ist byte-identisch. CI fährt die WebGL2-Lane.

Allokations-freie Hot-Paths, geschlossene Typlöcher, Doku-Sichtbarkeit.
Verhaltens-aequivalent; keine oeffentlichen Signaturen entfernt/umbenannt.

- perf(math): Polygon.project() inline ohne clone/map/spread (SAT-Hot-Path)
- perf(rendering): Container.contains() for-Schleife statt .some-Closure
- perf(core): _invalidateBoundsCascade am dirty-Vorfahren kurzschliessen
- perf(input): InputManager pointers mit Map statt Record (kein Object.values/Frame)
- perf(particles): WebGPU-Uniform direkte Index-Writes statt 44-Element-Literal
- refactor(types): Loadable/AssetInput => unknown; gratuitoesen View.updateId-Cast
  + dadurch redundante Folge-Casts in Loader/SceneNode entfernt
- docs(math): Collision-Bezeichner klargestellt; Time.temp/Polygon.temp @internal

Tests: Polygon.project()-Coverage + Cascade-Kurzschluss-Korrektheitstest.
API-Docs (time/polygon.mdx) fuer die @internal-Marker regeneriert.
@Exoridus Exoridus merged commit 0275f66 into main Jun 23, 2026
12 checks passed
@Exoridus Exoridus deleted the feat/v0.15-w0-quick-wins branch June 23, 2026 12:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant