Chrome의 탭 삭제 - 메모리 절약 실험

Addy Osmani
Addy Osmani

Chrome의 메모리 사용 공간을 줄이는 것은 올해 팀의 최우선 과제 중 하나입니다. V8의 가비지 컬렉션 프로세스를 개선하여 이미 Gmail의 메모리 사용량이 최대 45% 감소했지만 이 기능은 시작에 불과합니다. 메모리 사용에 관한 다음 실험 중 하나는 저처럼 탭 축적기를 대상으로 하는 것입니다. 이를 탭 삭제라고 합니다.

열려 있는 모든 탭이 사용되는 것은 아닙니다. 메모리가 부족하면 Chrome에서 불필요한 백그라운드 탭을 삭제할 수 있습니다.

탭 삭제는 Chrome 46 이상에서 실험으로 제공됩니다.

배경

대부분의 사용자는 한 번에 하나의 탭만 사용하지만, 연 모든 탭의 렌더기 프로세스는 일반적으로 탭당 약 50MB가 사용됩니다. 탭이 10개 열려 있다면 백그라운드 탭 상태를 유지하기 위해 최소 450MB의 메모리가 사용됩니다. 시간이 지나면서 관리하기 힘들어질 수 있습니다.

탭당 필요한 메모리

Google의 목표 중 하나는 실제로 사용하지 않는 탭에서 사용되는 메모리를 줄이는 것입니다. Chrome 작업 관리자에서 시스템 메모리를 소비하는 탭을 보면 아래 사이트 중 한두 개만 '사용'하고 있는 반면 백그라운드에 있는 다른 탭은 사용되지 않습니다.

메모리가 필요한 작업 관리자

이러한 이유로 탭을 삭제하면 메모리 사용량을 줄이는 데 도움이 될 수 있습니다.

사용하지 않는 탭 삭제

탭 삭제를 사용하면 시스템 메모리가 매우 부족한 것으로 감지될 때 Chrome에서 사용자가 유용하지 않은 탭을 자동으로 삭제할 수 있습니다. 삭제란 무엇인가요? 삭제된 탭은 사라지지 않습니다. Chrome 탭 표시줄에 계속 표시됩니다. 삭제된 탭으로 다시 돌아가면 클릭하면 새로고침됩니다. 양식 콘텐츠, 스크롤 위치 등은 앞으로/뒤로 탭 탐색 시와 동일한 방식으로 저장되고 복원됩니다.

또한 모든 탭 리소스를 로컬에서 캐싱할 수 있는 또 다른 새로운 기능이 있습니다. 이 기능은 오프라인일 때 탭을 삭제하는 기능과 원활하게 작동합니다. 탭이 재활성화되면 이전에 네트워크를 통해 로드한 캐시된 버전을 새로고침할 수 있는 선택권이 제공됩니다. 캐시에서 페이지 새로고침을 사용 설정하려면 chrome://flags/#show-saved-copy에서 다른 실험을 시도해 보세요.

chrome://flags/#enable-tab-discarding를 통해 탭 삭제를 사용 설정하고 Chrome을 다시 실행하면 지금 바로 탭 삭제를 사용해 볼 수 있습니다. 사용 설정 여부는 동일한 Chrome chrome://flags 페이지를 통해 제어할 수 있습니다.

탭 삭제 스크린샷 사용 설정
다시 실행 버튼 스크린샷.

chrome://discards라는 새 페이지를 사용하면 현재 열려 있는 탭을 나열할 수 있으며 Google에서는 이러한 탭이 사용자에게 얼마나 흥미로운지 (가장 많이, 마음에 들지 않는 것)에 관한 유용한 정보를 공유하고자 합니다.

삭제된 탭 페이지 스크린샷

이 기능을 테스트하려면 시스템이 메모리 부족 모드가 될 때까지 일반적인 탐색 동작을 실행하거나 '지금 탭 삭제'를 클릭하여 about:discards에서 탭 삭제를 트리거할 수 있습니다. 이렇게 하면 목록의 마지막 탭이 삭제됩니다. 'Discard' 버튼을 클릭하여 목록에서 특정 탭을 삭제할 수도 있습니다. 삭제된 탭에는 [삭제됨] 프리픽스가 표시됩니다.

삭제된 탭 예시 스크린샷

탭을 삭제하면 다음 순서로 탭이 삭제됩니다.

  • 새 탭 페이지, 북마크 등과 같은 내부 페이지
  • 오래전에 선택된 탭
  • 최근에 선택한 탭
  • 창에서 실행되는 앱
  • 탭 고정
  • 선택한 탭

Windows 및 Mac OS용 Chrome Canary에서 탭 삭제 실험이 사용 설정되었으며 Linux 구현도 곧 제공될 예정입니다.

탭 삭제 여부를 판단할 때도 고정된 탭이 고려됩니다.

영감: 안녕하세요, 멋진 멜빵

탭 삭제에 대해 잘 알고 있다면 The Great Suspender와 같이 조금 더 단순한 버전을 제공하는 유용한 Chrome 확장 프로그램을 이미 접했기 때문일 것입니다. Great Suspender는 사용자설정된 비활성 기간이 지나면 탭을 정지하여 Chrome의 메모리 및 GPU 공간을 줄이는 것을 목표로 합니다.

정지기 스크린샷

탭 삭제와 마찬가지로 탭을 다시 상호작용해야 할 때 탭 정지를 해제할 수 있습니다. Great Suspender는 각 탭의 제목과 파비콘을 유지 관리하여 정지된 탭을 어두운 상태로 표시하므로 언제든지 쉽게 다시 탐색할 수 있습니다.

정지된 탭 파비콘 스크린샷.

활발히 사용하지 않는 백그라운드 탭은 정지되어 메모리를 절약합니다. 하지만 여전히 사용 중인 탭 (GitHub 및 YouTube)은 정상적으로 실행됩니다.

실제로 탭 삭제를 개발하는 동안 Great Suspender 확장 프로그램의 작성자와 활발한 대화를 나누었습니다. 개발자들은 사용자 무관심 상태를 잃는 등 확장 프로그램이 할 수 있는 것보다 더 효율적인 방식으로 이 문제를 기본적으로 해결하는 것을 보고 기뻐했습니다.

향후 개선사항: 탭 serializer

탭 serializer는 탭 삭제에 관한 현재의 접근 방식을 크게 개선할 수 있을 것으로 예상되는 향후 작업입니다. Chrome 탭의 콘텐츠를 가져와 *현재* 상태를 바이너리 blob에 직렬화합니다. 이 바이너리 blob은 나중에 탭으로 역직렬화할 수 있습니다.

serializer는 Chrome, Blink, V8이 탭을 제대로 보존하는 데 필요한 거의 모든 항목을 직렬화합니다 (이 문제를 해결하는 Chrome 확장 프로그램은 지금까지 쉽게 달성할 수 없었습니다). 직렬화에는 DOM (많은 WebGL 및 캔버스 포함), CSS, V8 JavaScript VM의 상태가 포함됩니다.

Serializer 개념 스크린샷

Android나 ChromeOS를 사용한다면 이 게시물에서 다룬 탭 삭제 실험과 마찬가지로 메모리 사용량을 줄이기 위해 백그라운드 탭을 적극적으로 종료한다는 사실을 알고 있을 것입니다. 이 문제를 해결하는 과정에서 문제는 탭의 상태가 *모두* 손실된다는 점이었습니다.

탭에 다시 관심을 보이면 탭을 새로고침해야 하며, 탭과의 모든 상호작용이 삭제됩니다. 탭 serializer는 네트워크로 돌아가지 않고도 거의 정확하게 원래 상태로 돌아갈 수 있는 방식으로 이 문제에 접근합니다. 나중에 이 작업에 대한 자세한 정보를 공유할 수 있도록 하겠습니다.

탭 삭제를 사용해 보고 의견을 알려주세요.

이 기능이 유용했는지, 어떻게 개선할 수 있는지 의견을 듣고 싶습니다. 사용해 보고 사용해 보고 (특히 탭을 쌓으려는 경우) 댓글을 통해 의견을 알려주세요. crbug.com에서 발생하는 버그에 대한 티켓을 제출해 주시면 감사하겠습니다.