피드로 돌아가기
Dev.toFrontend
원문 읽기
MutationObserver 기반 150ms Quiescence 패턴을 통한 SPA 스크롤 복구 최적화
Browser Scroll Restoration Is Broken on SPAs. Here's How a Chrome Extension Fixes It.
AI 요약
Context
브라우저의 기본 Scroll Restoration은 HTML 파싱 직후 실행되어, 비동기 데이터 로딩 후 DOM이 렌더링되는 SPA 구조에서 위치 불일치 발생. 기존 framework 수준의 nextTick 기반 복구 방식은 async 데이터 페칭 완료 시점을 보장하지 못하는 한계 존재.
Technical Solution
chrome.storage.local을 활용하여 세션 유지 기간과 상관없이 URL 기반 스크롤 위치를 영속적으로 저장하는 구조 설계history.pushState인터셉터와popstate이벤트 리스너를 통한 SPA 내부 페이지 전환 감지 메커니즘 구현MutationObserver를 도입하여 DOM 변화를 추적하고, 150ms 동안 추가 변동이 없는 Quiescence 상태를 확인 후 복구 로직 실행- 저장 시 500ms Debounce 처리를 통해 스크롤 이벤트 발생 시의 불필요한 Storage Write 부하 최소화
- URL 정규화를 통해 Hash 기반 라우팅 시 발생하는 중복 키 생성 문제 해결 및 저장 공간 효율성 확보
실천 포인트
- 비동기 렌더링 환경에서 DOM 안정화 시점을 판단하기 위해 MutationObserver 기반의 Quiescence 패턴 검토 - 전역 상태 관리 도구 대신 브라우저 스토리지 API를 활용한 세션 외 지속성 데이터 관리 전략 고려 - 잦은 I/O 작업이 발생하는 이벤트 핸들러에 Debounce를 적용하여 메인 스레드 차단 방지