← All issues

Find-in-Page: Cached Flat Buffer with Lazy Invalidation

5e0c6a7

이 commit은 TextIterator를 감싸는 새로운 클래스 CachedMatchFinder를 도입합니다. 이 클래스는 페이지의 모든 가시적인 텍스트를 flat buffer로 유지하고, find-in-page 결과를 캐싱합니다. Cache 무효화는 domTreeVersionstyleRecalcCount를 기준으로 판단합니다. 구조적으로는 쿼리마다 windowed SearchBuffer를 사용해 전체 DOM을 순회하던 방식에서, 단일 cached flat buffer와 unbounded ICU 검색 방식으로 전환됩니다.

Before:                                After:
  findNext()                            findNext()
    └─► TextIterator (full DOM walk)      └─► CachedMatchFinder
          └─► SearchBuffer (windowed)           ├─[valid]─► cached matches
                └─► match range                 └─[stale]─► rebuild buffer + ICU search

  Cache validity: domTreeVersion == saved && styleRecalcCount == saved

Shadow DOM 순회 동작은 find option으로 제어됩니다. flat-tree 모드에서는 shadow 경계를 넘어 순회할 수 있으며, DoNotTraverseFlatTree 모드에서는 scope 격리가 유지됩니다.

SearchBuffer의 windowed 방식과 달리, CachedMatchFinder는 문서 전체를 아우르는 단일 flat buffer를 할당합니다. 비정상적으로 큰 페이지에서는 대규모 메모리 할당으로 이어질 가능성이 있으며, offset-to-BoundaryPoint 매핑 과정에서는 새로운 유형의 off-by-one 오류 가능성이 존재합니다.

🔒

Cache invalidation logic and offset mapping between flat buffer and DOM positions offer several security-relevant audit directions.

더 확인하려면 구독해 주세요