에이전트가 매번 처음부터 화면 구조를 읽으면 요청 앞부분에 준비 작업이 반복된다. 북극성에는 탭을 보거나 전환할 때 읽을 구조를 미리 준비하는 계층을 뒀다. 빠르게 읽게 하려는 기능이 백그라운드 전체를 계속 훑는 기능으로 커지지 않게 범위를 정했다.

먼저 준비할 탭을 고른다

현재 호스트의 자동 준비는 휴면 탭을 제외하고 창이 보이며 최소화되지 않은 경우를 대상으로 한다. 활성 탭과 참고 탭이 자동 준비 후보가 된다. 열려 있는 모든 탭을 계속 읽는 방식으로 시작하지 않았다. 사용할 가능성이 높은 화면부터 준비하려는 선택이다.

명시적인 자료 읽기는 자동 후보 여부와 구별한다. preparation의 explicit 경로는 자동 eligible 조건을 넘을 수 있지만 휴면·파괴된 페이지·로딩 중 같은 조건은 여전히 남는다. 자동화를 줄이는 기준과 사용자가 요청한 읽기를 막는 기준을 같은 것으로 만들지 않으려 했다.

탭 전환 이벤트마다 즉시 전체를 읽지 않는다

schedule은 탭별 타이머를 교체하고 짧게 기다렸다 ensure를 호출한다. 여러 전환 이벤트가 이어져도 같은 탭의 대기 타이머를 계속 늘리는 방식이다. ensure는 이미 그 탭에서 진행 중인 Promise가 있으면 그 결과를 기다린다. 한 탭의 같은 준비가 동시에 겹치지 않게 했다.

이것을 모든 페이지가 정해진 시간 안에 준비된다는 보장으로 쓰지는 않는다. 페이지 로딩과 실제 관찰 시간, 네트워크와 문서 변경에 따라 달라진다. 타이머 숫자는 시작을 조율하는 값이고 업무가 끝나는 시간은 아니다. UI의 준비 문구도 그 차이를 설명해야 한다.

변하지 않았으면 관찰을 다시 만들지 않는다

같은 문서 세대와 URL의 캐시가 있고 현재 revision이 같으면 사용 시각만 갱신한다. 실제 observe를 다시 실행하거나 준비 상태를 다시 깜박이지 않는다. 기존 시험에서도 변경 없는 두 번째 ensure가 읽기 횟수와 UI 변경 횟수를 늘리지 않는지 확인한다.

revision은 모든 업무의 성공 지문이 아니다. 페이지의 관찰 변화 추적값이고 어떤 상태를 감시하는지 구현에 한계가 있다. 같은 revision을 봤다고 로그인 유효성이나 외부 저장 결과까지 확인했다고 쓰지 않는다. 재사용한 것은 읽기 자료이지 업무 성공 판정이 아니다.

읽기 제한도 준비 과정에서 다시 확인한다

prepare는 allowed와 공개 주소 확인을 거친 뒤 관찰한다. 비공개 프로필과 읽기 제외 화면의 자동 준비를 진행하지 않는다. 캐시가 있다고 제한 검사를 생략하지 않고 peek에서도 현재 읽기 허용 여부를 다시 본다.

관찰 중 오류가 나면 자동 읽기 대기로 표시하고 짧은 재시도 간격을 둔다. 너무 큰 페이지는 필요한 부분을 요청할 때 읽도록 안내한다. 오류를 숨기고 ready라고 표시하는 것보다 현재 준비 상태를 정확히 보여 주는 편이 낫다. 다만 이 준비 오류가 곧 해당 사이트의 모든 수동 읽기 실패라는 뜻은 아니다.

보관량을 기능의 일부로 정했다

현재 기본 한도는 항목 수와 전체 바이트, 항목별 바이트, 사용 수명을 함께 둔다. 개수만 제한하면 큰 페이지 몇 개가 메모리를 계속 점유할 수 있고 시간만 제한하면 짧은 시간에 많은 탭이 쌓일 수 있다. 오래 쓰지 않은 항목부터 정리하는 정책으로 함께 관리한다.

한도 시험은 작은 합성 제한으로 개수·바이트·시간에 따른 제거와 휴면 탭 미관찰을 확인한다. 이 글에서는 코드와 해당 시험을 읽었다. 운영 중 페이지를 대량으로 열어 새 메모리 벤치마크를 한 보고서는 아니다. 기본 한도가 모든 PC의 최적값이라는 주장도 하지 않는다.

미리 읽었어도 실제 행동은 새로 확인한다

준비 자료는 페이지 설명을 빨리 얻기 위한 것이다. 클릭할 요소 참조를 계속 보관하는 기능과 구별하며 조작 전 최신 관찰이 필요하다. ready 문구를 입력해도 된다는 승인이나 현재 결과가 맞다는 판정으로 쓰지 않는다.

다른 업무 프로그램에도 준비와 실행을 나눌 수 있다. 자주 보는 현황과 자료는 제한된 캐시로 준비하되 실제 저장과 변경 전에 현재 상태를 확인한다. 나는 빠르게 응답하는 경험과 오래된 상태로 행동하지 않는 기준을 함께 유지하려 했다. 이 두 책임을 나눈 것이 자동 읽기 준비 계층의 핵심이다.