Zmniejszenie zapotrzebowania Chrome na pamięć jest jednym z głównych priorytetów zespołu w tym roku. Dzięki ulepszeniom w procesie usuwania elementów zbędących w V8 udało nam się już zmniejszyć wykorzystanie pamięci przez Gmaila nawet o 45%, ale to dopiero początek. Jeden z naszych kolejnych eksperymentów dotyczących wykorzystania pamięci jest skierowany do osób, które otwierają wiele kart (jak ja). Jest to tzw. odrzucanie kart.

Wyrzucanie karty jest dostępne jako eksperyment w Chrome 46 i nowszych wersjach.
Tło
Na każdą otwartą kartę proces renderowania zajmuje zwykle około 50 MB, mimo że większość użytkowników korzysta tylko z jednej karty naraz. Jeśli masz 10 otwartych kart, na samym tylko utrzymaniu stanu karty w tle zużywa się co najmniej 450 MB pamięci. Z czasem może to być niewygodne.

Jednym z naszych celów jest zmniejszenie ilości pamięci używanej na kartach, których nie używasz. Jeśli w menedżerze zadań Chrome sprawdzę, które karty zużywają pamięć systemową, okaże się, że korzystam tylko z jednej lub dwóch witryn z listy poniżej, a inne karty w tle są nieużywane.

Właśnie w takich przypadkach odrzucanie kart może pomóc w zmniejszeniu wykorzystania pamięci.
Odrzucanie nieużywanych kart
Odrzucanie kart pozwala Chrome automatycznie odrzucać karty, które nie są dla Ciebie szczególnie interesujące, gdy wykryje, że pamięć systemowa jest prawie zapełniona. Co rozumiemy przez odrzucenie? Odrzucona karta nigdzie nie znika. Zablokujemy to, ale nadal będzie widoczne na pasku kart Chrome. Jeśli wrócisz do karty, która została odrzucona, po kliknięciu zostanie ona ponownie załadowana. Treść formularza, pozycja przewijania itp. są zapisywane i przywracane w taki sam sposób jak podczas przechodzenia do przodu i do tyłu za pomocą kart.
Udostępniamy też nową funkcję, która umożliwia buforowanie wszystkich zasobów kart lokalnie. Dobrze współgra ona z odrzucaniem kart w trybie offline. Gdy karta zostanie ponownie włączona, możesz wybrać, czy chcesz ponownie załadować wersję z pamięci podręcznej, która została wcześniej pobrana przez sieć. Aby umożliwić ponowne wczytywanie strony z pamięci podręcznej, możesz wypróbować inny eksperyment w sekcji chrome://flags/#show-saved-copy
.
Możesz już dziś wypróbować odrzucanie kart, włączając tę funkcjęchrome://flags/#enable-tab-discarding
i ponownie uruchamiając Chrome. Możesz włączyć lub wyłączyć tę funkcję na tej samej stronie chrome://flags
w Chrome.


Nowa strona chrome://discards
zawiera listę otwartych kart. Staramy się też pokazać, które z nich są według nas najciekawsze (w kolejności od najciekawszej do najmniej interesującej).

Aby przetestować tę funkcję, możesz normalnie przeglądać strony, aż system znajdzie się w stanie niskiej pamięci, lub wywołać odrzucenie karty z about:discards, klikając „Odrzuć kartę teraz”. Spowoduje to odrzucenie ostatniej karty na liście. Możesz też odrzucić daną kartę z listy, klikając odpowiedni przycisk „Odrzuć”. Odrzucona karta będzie miała prefiks [Odrzucono].

Odrzucanie kart odrzuca karty w takiej kolejności:
- strony wewnętrzne, takie jak strona nowej karty, zakładki itp.
- karty wybrane dawno temu,
- Ostatnio wybrane karty
- Aplikacje działające w oknie
- przypięte karty,
- Wybrana karta
Włączyliśmy eksperyment dotyczący odrzucania kart w Chrome Canary w systemach Windows i macOS. Wkrótce wprowadzimy go również w systemie Linux.

Inspiracja: Cześć,
Jeśli wyrzucanie kart brzmi znajomo, to prawdopodobnie dlatego, że korzystasz z przydatnych rozszerzeń do Chrome, które oferują nieco prostszą wersję tej funkcji, takich jak The Great Suspender. Rozszerzenie Great Suspender ma na celu zmniejszenie obciążenia pamięci i procesora graficznego Chrome przez zawieszanie kart po określonym okresie nieaktywności.

Podobnie jak w przypadku odrzucania kart, możesz je przywrócić, gdy będziesz ich ponownie potrzebować. Great Suspender zachowuje tytuł i ikonę każdej karty, wyświetlając je w przyciemnionym stanie, dzięki czemu w każdej chwili możesz do nich wrócić.

Karty w tle, których nie używam aktywnie, zostały zawieszone, aby oszczędzać pamięć. Karty, z których nadal aktywnie korzystam (GitHub i YouTube), działają jednak normalnie.
Podczas opracowywania funkcji odrzucania kart rozmawialiśmy z autorem rozszerzenia Great Suspender. Jest on zadowolony, że udało nam się rozwiązać ten problem w sposób bardziej wydajny niż rozszerzenie, np. przez utratę stanu niedziałania użytkownika.
Przyszłe ulepszenia: serializator kart
Serwer serializujący karty to przyszłe rozwiązanie, które naszym zdaniem może znacznie poprawić nasze obecne podejście do odrzucania kart. Pobiera zawartość karty Chrome i serializuje jej *bieżący* stan w postaci binarnego bloba. Ten binarne blob można później zdeserializować na karcie.
Serializator serializowałby prawie wszystko, czego Chrome, Blink i V8 potrzebują do prawidłowego zachowania karty (co w przypadku rozszerzeń do Chrome rozwiązujących ten problem nie było do tej pory możliwe). Serializacja obejmuje zwykle: DOM (z dużą ilością WebGL i Canvas), CSS oraz stan maszyny wirtualnej JavaScript V8.

Jeśli używasz Androida lub ChromeOS, wiesz pewnie, że (podobnie jak w przypadku eksperymentu z odrzucaniem kart) agresywnie zamykamy karty w tle, aby zapewnić niskie zużycie pamięci. Problem z naszym rozwiązaniem polegał na tym, że karta traciłaby *cały* stan.
Gdy znów zainteresujesz się tą kartą, będziemy musieli ją ponownie załadować, a wszystkie interakcje z nią zostaną utracone. Serializator kart radzi sobie z tym problemem w sposób, który pozwala przywrócić prawie dokładnie to, co było wcześniej, bez konieczności powrotu do sieci. W przyszłości podamy więcej informacji na temat tej pracy.
Wypróbuj funkcję odrzucania kart i przekaż nam swoją opinię
Chcielibyśmy się dowiedzieć, czy ta funkcja jest dla Ciebie przydatna i jak można ją ulepszyć. Wypróbuj go, pobaw się nim (szczególnie jeśli masz dużo kart) i daj nam znać w komentarzach, co o nim myślisz. :) Chętnie też przyjmiemy zgłoszenia błędów na stronie crbug.com.