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 구현도 곧 제공될 예정입니다.

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

아이디어: 안녕하세요, 멋진 액세서리

탭 삭제가 익숙하다면 The Great Suspender와 같이 이 아이디어를 약간 더 간단하게 구현하는 유용한 Chrome 확장 프로그램을 사용해 본 적이 있기 때문일 것입니다. Great Suspender는 맞춤 비활성 시간 후에 탭을 일시중지하여 Chrome의 메모리 및 GPU 공간을 줄이는 것을 목표로 합니다.

서스펜더 스크린샷

탭 삭제와 마찬가지로 탭과 다시 상호작용해야 할 때 탭의 일시중지를 해제할 수 있습니다. Great Suspender는 각 탭의 제목과 favicon을 유지하면서 일시중지된 탭을 어두운 상태로 표시하므로 언제든지 간편하게 다시 이동할 수 있습니다.

일시중지된 탭의 파비콘 스크린샷

내가 사용하지 않는 백그라운드 탭이 정지되어 메모리가 절약됩니다. 하지만 제가 계속 사용 중인 탭 (GitHub 및 YouTube)은 여전히 정상적으로 작동합니다.

탭 삭제를 개발하는 동안 Great Suspender 확장 프로그램의 작성자와 좋은 대화를 나눴습니다. 작성자는 Google이 확장 프로그램보다 더 효율적인 방식으로 이 문제를 해결하고 있다고 생각합니다(예: 사용자 활동이 없는 상태가 사라짐).

향후 개선사항: 탭 직렬 변환기

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

직렬화 프로그램은 Chrome, Blink, V8이 탭을 올바르게 보존하는 데 필요한 거의 모든 항목을 직렬화합니다. 이는 이전에 이 문제를 해결하는 Chrome 확장 프로그램에서 쉽게 달성할 수 없었던 작업입니다. 직렬화에는 일반적인 DOM (많은 WebGL 및 캔버스 포함), CSS, V8 JavaScript VM 상태가 포함됩니다.

직렬화 컨셉 스크린샷

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

탭에 다시 관심을 보이면 탭을 새로고침해야 하며 탭과의 모든 상호작용이 사라집니다. 탭 직렬화기는 네트워크로 돌아가지 않고도 거의 정확하게 이전 상태로 돌아가는 방식으로 이 문제에 접근합니다. 이 작업에 관한 자세한 내용은 추후 공유해 드리겠습니다.

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

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