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

아디 오스마니
애디 오스마니

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에서 탭 삭제를 트리거할 수 있습니다. 이렇게 하면 목록의 마지막 탭이 삭제됩니다. '삭제' 버튼을 클릭하여 목록에서 특정 탭을 삭제할 수도 있습니다. 삭제된 탭은 [삭제됨] 접두어와 함께 표시됩니다.

삭제된 탭 예시 스크린샷

탭 삭제는 다음 순서로 탭 삭제:

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

Windows 및 Mac OS용 Chrome Canary에서 탭 삭제 실험을 사용 설정했으며 곧 Linux도 구현할 예정입니다.

고정된 탭은 탭 삭제 여부를 확인할 때 고려됩니다.

영감: 이봐요, 멋진 멜빵

탭을 삭제하는 것이 익숙할 경우 대형 서스펜더와 같이 이러한 아이디어를 약간 더 간단하게 제공할 수 있는 유용한 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에서 발생하는 버그에 관한 티켓을 제출해 주시면 감사하겠습니다.