Odrzucanie kart w Chrome – eksperyment oszczędzania pamięci

Addy Osmani
Addy Osmani

Zmniejszenie wykorzystania pamięci przez Chrome jest jednym z głównych priorytetów zespołu w tym roku. Już zaobserwowaliśmy nawet 45-procentowe zmniejszenie wykorzystania pamięci w Gmailu dzięki udoskonaleniu procesu odczyszczania w V8, ale to dopiero początek. Jeden z naszych kolejnych eksperymentów związanych z pamięcią ma na celu gromadzenie kart (takich jak ja). To Odrzucanie kart.

Nie wszystkie otwarte karty są używane. Jeśli zaczyna brakować pamięci, Chrome może odrzucić nieciekawe karty w tle.

Odrzucanie kart jest dostępne w ramach eksperymentu w Chrome 46 i nowszych wersjach.

Wprowadzenie

Mechanizm renderowania zajmuje zwykle około 50 MB na każdą otwartą kartę, mimo że większość osób używa tylko jednej karty w danym momencie. Jeśli masz 10 otwartych kart, musisz wykorzystać co najmniej 450 MB pamięci, aby zachować stan karty w tle. Z czasem może to stać się nieco nieporęczne.

Wymagana pamięć na kartę

Jednym z naszych celów jest zmniejszenie ilości pamięci wykorzystywanej na kartach, których nie używasz. Gdy spojrzę w Menedżerze zadań Chrome, które karty zużywają moją pamięć systemową, tak naprawdę „używam” jednej lub dwóch poniższych stron, a pozostałe karty w tle nie są używane.

Menedżer zadań wymagający pamięci

To właśnie tu odrzucanie kart może pomóc ograniczyć wykorzystanie pamięci.

Odrzucanie nieużywanych kart

Odrzucanie kart pozwala Chrome automatycznie odrzucać karty, które nie są dla Ciebie interesujące, gdy wykryje, że w systemie kończy się bardzo mało pamięci. Co rozumiemy przez odrzucenie? Odrzucona karta nie zniknie. Usuwam ją, ale nadal widać ją na pasku kart Chrome. Jeśli wrócisz na kartę, która została odrzucona, po kliknięciu załaduje się ona ponownie. Treść formularza, pozycja przewijania itd. są zapisywane i przywracane w taki sam sposób, w jaki byłyby to podczas poruszania się po kartach do przodu i do tyłu.

Dostępna jest też nowa funkcja, która umożliwia lokalne buforowanie wszystkich zasobów kart, co ułatwia jej odrzucanie, gdy jesteś offline. Po ponownym aktywowaniu karty możesz wybrać ponowne załadowanie wersji z pamięci podręcznej, która została wcześniej załadowana przez sieć. Aby włączyć ładowanie stron z pamięci podręcznej, wypróbuj inny eksperyment pod adresem chrome://flags/#show-saved-copy.

Już dziś możesz wypróbować odrzucanie kart: włącz funkcję chrome://flags/#enable-tab-discarding i ponownie uruchom Chrome. Możesz włączyć lub wyłączyć tę funkcję na tej samej stronie chrome://flags w Chrome.

Włącz odrzucanie zrzutu ekranu przez kartę.
Zrzut ekranu przycisku ponownego uruchamiania.

Na nowej stronie o nazwie chrome://discards możesz zobaczyć, które karty są obecnie otwarte. Staramy się też dzielić się z Tobą informacjami na temat tego, na ile interesujące (naszym zdaniem) są dla Ciebie (od większości do najmniejszych).

Zrzut ekranu strony odrzuconych kart.

Aby przetestować tę funkcję, możesz kontynuować normalne przeglądanie do momentu wyłączenia systemu do trybu małej ilości pamięci lub spowodować odrzucenie karty na stronie about:discards przez kliknięcie „Odrzuć kartę teraz”. Spowoduje to odrzucenie ostatniej karty na liście. Możesz też odrzucić konkretną kartę z listy, klikając jej przycisk „Odrzuć”. Wyświetli się odrzucona karta z prefiksem [Odrzucone].

Zrzut ekranu przykładowej karty odrzuconej.

Odrzucenie kart powoduje odrzucenie kart w tej kolejności:

  • Strony wewnętrzne, np. strona nowej karty, zakładki itp.
  • Karty zostały wybrane dawno temu
  • Ostatnio wybrane karty
  • Aplikacje uruchomione w oknie
  • przypięte karty,
  • Wybrana karta

Włączyliśmy eksperyment dotyczący odrzucania kart w Chrome Canary w systemach Windows i macOS, a wkrótce wprowadzimy go w wersji na Linuksa.

Przypięte karty są też brane pod uwagę podczas ustalania, czy odrzucić kartę.

Inspiracja: świetna szelka

Jeśli odrzucanie kart brzmi znajomo, to prawdopodobnie natrafiłeś na przydatne rozszerzenia do Chrome, które mają nieco prostszą wersję, np. The Great Suspensioner. The Great Suspensioner pozwala ograniczyć wykorzystanie pamięci i GPU Chrome przez zawieszanie kart po niestandardowym okresie braku aktywności.

Zrzut ekranu z Zawieszką.

Podobnie jak w przypadku odrzucania kart, zawieszenie kart można cofnąć, gdy zajdzie potrzeba ich ponownego korzystania. Great susper zachowuje tytuł i favikonę każdej karty, wyświetlając zawieszone karty w przyciemnionym miejscu, dzięki czemu w każdej chwili można od razu do nich wrócić.

Zrzut ekranu z favikoną zawieszonych kart.

Karty w tle, których nie używam aktywnie, zostały zawieszone, aby oszczędzać pamięć. Karty, których wciąż aktywnie używam (GitHub i YouTube), działają jak zwykle.

Podczas opracowywania funkcji odrzucania kart dobrze porozmawialiśmy z autorem rozszerzenia Great Suspensioner. Bardzo cieszymy się, że rozwiązaliśmy ten problem bardziej wydajnie niż rozszerzenie, na przykład tracąc informacje o tym, co użytkownik nie robi.

Przyszłe ulepszenia: serializacja kart

Serializator kart to przyszłość, która według nas może prowadzić do znacznych ulepszeń w naszym obecnym podejściu do odrzucania kart. Wykorzystuje zawartość karty Chrome i serializuje jej *bieżący* stan do binarnego obiektu blob. Ten binarny blob można później przekształcić w kartę.

Serializator będzie zserializować niemal wszystko, co Chrome, Blink i V8 muszą odpowiednio zachować kartę (coś, co do tej pory nie było w stanie rozwiązać tego problemu przez rozszerzenia do Chrome). Serializacja obejmuje typowe podejrzane elementy: DOM (z dużą liczbą WebGL i Canvas), CSS i stan maszyny wirtualnej JavaScript V8.

Zrzut ekranu przedstawiający koncepcję serializera

Jeśli korzystasz z Androida lub ChromeOS, pamiętaj, że (podobnie jak w przypadku omawianego w tym poście eksperymentu z odrzucaniem kart) intensywnie zamykamy karty w tle, aby ograniczyć wykorzystanie pamięci. Problem w tym, że karta straci *cały* stan.

Gdy ponownie wykażesz zainteresowanie tą kartą, trzeba będzie ją załadować ponownie, a cała interakcja z nią zostanie utracona. Serializator kart podchodzi do tego problemu w sposób, który umożliwia powrót do niemal dokładnie tego, co było wcześniej, bez konieczności powracania do sieci. Chętnie przekażemy więcej informacji na temat tych prac.

Wypróbuj funkcję odrzucania kart i daj nam znać, co o niej myślisz

Chcielibyśmy się dowiedzieć, czy ta funkcja jest przydatna, i jak można ją ulepszyć. Wypróbuj ją i poeksperymentuj (zwłaszcza dla miłośników kart) i podziel się z nami swoją opinią w komentarzach. :) Będziemy również wdzięczni za przesłanie zgłoszenia dotyczącego błędów, które pojawią się na stronie crbug.com.