개요
에디터 → 히스토리 관리와
함께 읽으세요. 여기서는 contenteditable과 WASM 모델이 공존할 때 누가 undo를 소유하는지를 강조합니다.
브라우저 undo
편집 가능 영역에 대한 브라우저 자체 undo가 있습니다. 프로그래밍 방식 DOM 변경·execCommand는 스택을 비우거나 나눌 수 있어 브라우저마다 다릅니다.
모델 히스토리
견고한 에디터는 보통 Rust에서 역연산 또는 스냅샷으로 모델 히스토리를 구현하고 DOM을 다시 그립니다. beforeinput으로 가로채기 등은 지원 범위를 확인해야 합니다.
브라우저 undo와 앱 undo가 동시에 살아 있으면 사용자에게 혼란입니다. 텍스트 편집에 하나의 권위 있는 히스토리를 두세요.
WASM 트랜잭션
Rust에서 변경을 트랜잭션으로 묶고, undo는 역연산 또는 체크포인트 롤백으로 노출합니다. DOM 패치만 JS로 넘기면 불일치가 줄어듭니다.
조합 입력
IME 조합 중 undo는 특히 깨지기 쉽습니다. 히스토리 커밋을 조합 종료 이후로 미루는 경우가 많습니다. IME·조합 입력.
Wasm 가이드
에디팅 방식
contenteditable + WASM: 진실 원천, 이벤트 순서, DOM↔모델 루프, 정규화, Rust 호출 시점.
IME·조합 입력
조합 이벤트, Rust 문서 모델 동기화, IME는 여전히 브라우저 영역인 이유.
JS ↔ WASM 경계
문자열·복사·배치 연산, 비동기와 입력 이벤트, 핫 패스 비용 줄이기.
클립보드·입력 라우팅
beforeinput, 붙여넣기, JS에서 라우팅할지 WASM에서 정제할지.
툴링·번들·워커
wasm-pack, wasm-opt, 코드 스플릿, Web Worker, COOP/COEP·스레드.
협업·CRDT (WASM)
Yrs·y-crdt, Yjs 연동, 스냅샷 vs 업데이트 스트림.
선택·Range·오프셋
UTF-16 vs UTF-8, JS Selection/Range, Rust 모델 매핑·getTargetRanges.
접근성 (WASM 호스트)
편집 표면이 브라우저일 때 역할·포커스·스크린 리더.
테스트·디버깅
E2E, JS↔WASM 경계 프로파일링, IME·붙여넣기 CI 재현.
보안·배포
CSP, SRI, 모듈 무결성, contenteditable 옆 WASM 호스팅.