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

Addy Osmani
Addy Osmani

Zmniejszanie wykorzystania pamięci przez Chrome jest jednym z głównych priorytetów zespołu w tym roku. Już dzięki udoskonaleniu procesu zbierania odpadów w V8 możemy zmniejszyć zużycie pamięci przez Gmaila nawet o 45%, ale to dopiero początek. Jeden z naszych kolejnych eksperymentów związanych z pamięcią jest skierowany do osób zbierających karty (takich jak ja). Funkcja ta nazywa się odrzucanie kart.

Nie wszystkie otwarte karty są używane. Jeśli w pamięci brakuje 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

Nasz proces renderowania zajmuje zwykle około 50 MB na każdą otwartą kartę, chociaż większość użytkowników korzysta z jednej karty naraz. Jeśli masz otwartych 10 kart, co najmniej 450 MB pamięci jest wykorzystywane na utrzymanie stanu karty w tle. Z czasem urządzenie może stać się nieporęczne.

Wymagana pamięć na kartę

Jednym z naszych celów jest zmniejszenie ilości pamięci używanej przez karty, których tak naprawdę nie używasz. Gdy w Menedżerze zadań Chrome sprawdzam, które karty zużywają moją pamięć systemową, to tak naprawdę wyświetlam tylko jedną lub dwie witryny wymienione poniżej, a pozostałe w tle są nieużywane.

Menedżer zadań wymagających pamięci

Dzięki temu odrzucenie kart może ograniczyć wykorzystanie pamięci.

Odrzucam nieużywane karty

Dzięki odrzucaniu kart Chrome automatycznie odrzuca karty, które nie są dla Ciebie interesujące, gdy wykryje, że pamięć systemowa niedługo się wyczerpuje. Co rozumiemy przez odrzucanie? Odrzucona karta nie zmieści się gdzieś indziej. Zamykamy go, ale nadal jest widoczny na pasku kart w Chrome. Jeśli wrócisz do odrzuconej karty, po kliknięciu załaduje się ona ponownie. Treść formularzy, pozycja przewijania itd. są zapisywane i przywracane w taki sam sposób, jak podczas nawigowania po kartach do przodu i do tyłu.

Mamy też nową funkcję, która umożliwia lokalne buforowanie wszystkich zasobów kart. Ta funkcja dobrze działa z odrzucaniem kart w trybie offline. Po ponownym aktywowaniu karty możesz ponownie załadować wersję z pamięci podręcznej, która została wcześniej załadowana przez sieć. Aby umożliwić ponowne ładowanie stron z pamięci podręcznej, możesz wypróbować inny eksperyment w sekcji chrome://flags/#show-saved-copy.

Możesz wypróbować odrzucanie kart już dziś, włączając tę funkcję w chrome://flags/#enable-tab-discarding i uruchamiając ponownie Chrome. Na tej samej stronie chrome://flags w Chrome możesz włączać i wyłączać tę funkcję.

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

Nowa strona o nazwie chrome://discards zawiera listę kart, które są obecnie otwarte. Staramy się pokazać, na ile interesujące (na naszym zdaniem) są one dla Ciebie (najwięcej lub co najmniej).

Zrzut ekranu strony odrzuconych kart.

Aby przetestować tę funkcję, możesz kontynuować przeglądanie w zwykły sposób, aż system zacznie działać w trybie małej ilości pamięci, albo uruchomić odrzucenie karty na stronie about:discards, klikając „Odrzuć kartę teraz”. Spowoduje to odrzucenie ostatniej karty na liście. Możesz też odrzucić konkretną kartę z listy, klikając odpowiadający jej przycisk „Odrzuć”. Wyświetli się odrzucona karta z prefiksem [Odrzucone].

Zrzut ekranu przedstawiający przykładową kartę odrzuconej.

Odrzucanie kart powoduje odrzucenie kart w tej kolejności:

  • strony wewnętrzne, np. strona nowej karty, zakładki itp.
  • Karty wybrane dawno temu
  • Ostatnio wybrane karty
  • Aplikacje działające w oknie
  • Przypięte karty
  • Wybrana karta

Wprowadziliśmy eksperyment dotyczący odrzucania kart w Chrome Canary w systemach Windows i macOS. Wkrótce pojawi się też implementacja w systemie Linux.

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

Inspiracja: świetna robota

Jeśli odrzucanie kart brzmi znajomo, oznacza to, że prawdopodobnie trafiłeś na przydatne rozszerzenia do Chrome, które oferują nieco prostszą wersję, np. The Great Suspensioner. Celem Wielkiego zawieszenia jest zmniejszenie ilości pamięci i obciążenia procesora graficznego Chrome przez zawieszenie kart po upływie niestandardowego okresu braku aktywności.

Zrzut ekranu zawieszonego.

Podobnie jak w przypadku odrzucania kart, możesz je przywrócić, gdy zechcesz z nich ponownie skorzystać. Wielkie zawieszenie pozwala zachować tytuł i favikonę każdej karty, wyświetlając zawieszone karty w przyciemnionym stanie, dzięki czemu można łatwo do nich wrócić w każdej chwili.

Zrzut ekranu z favikoną zawieszonych kart.

Karty w tle, których nie używam aktywnie, zostały zawieszone, co oszczędza miejsce w pamięci. Karty, z których nadal aktywnie korzystam (GitHub i YouTube), działają nadal normalnie.

Rozmawialiśmy bardzo miło z autorem rozszerzenia Great Pauseer podczas opracowywania odrzucania kart i cieszymy się, że natywnie rozwiązujemy ten problem w sposób skuteczniejszy niż rozszerzenie (np. tracąc stan braku działań użytkownika).

Przyszłe ulepszenia: serializacja kart

Serializator kart to kolejny element naszej pracy, który w przyszłości może pozwolić na znaczne ulepszenia naszego obecnego podejścia do odrzucania kart. Wykorzystuje zawartość karty Chrome i serializuje jej *bieżący* stan w binarny obiekt blob. Ten binarny obiekt blob można później przekształcić w kartę.

Serializator zserializował prawie wszystko, czego potrzebują Chrome, Blink i V8 do prawidłowego zachowania karty. Rozszerzenia do Chrome nie były wcześniej w stanie rozwiązać tego problemu. Serializacja obejmuje typowe typowe elementy: DOM (z dużą ilością zasobów WebGL i Canvas), CSS oraz stan maszyny wirtualnej JavaScript V8.

Zrzut ekranu przedstawiający koncepcję serializatora

Jeśli używasz Androida lub ChromeOS, być może wiesz, że (podobnie jak w przypadku eksperymentu z odrzucaniem kart omówionego w tym poście) intensywnie wyłączamy karty w tle, aby zminimalizować wykorzystanie pamięci. Problem polegał na tym, że karta utraciła *cały* stan.

Gdy ponownie wyrazisz zainteresowanie tą kartą, musielibyśmy załadować ją ponownie, co spowoduje utratę wszystkich interakcji z nią. Serializator kart po prostu podchodzi do tego problemu w taki sposób, że użytkownik może wrócić do niego niemal dokładnie bez potrzeby ponownego łączenia się z siecią. Zamierzamy udostępnić więcej informacji na ten temat w późniejszym czasie.

Wypróbuj odrzucanie kart i daj nam znać, co o tym myślisz

Chętnie dowiemy się, czy ta funkcja jest przydatna i jak można ją ulepszyć. Wypróbuj tę funkcję, wypróbuj ją (zwłaszcza jeśli lubisz karty) i podziel się z nami swoją opinią w komentarzach. :) Będziemy wdzięczni również za przesłanie zgłoszeń dotyczących błędów wykrytych na stronie crbug.com.