Eliminazione di schede in Chrome - Un esperimento per risparmiare memoria

La riduzione dell'impronta di memoria di Chrome è una delle priorità principali del team per quest'anno. Abbiamo già registrato una riduzione fino al 45% dell'utilizzo della memoria di Gmail grazie ai miglioramenti apportati al processo di garbage collection di V8, ma siamo solo all'inizio. Uno dei nostri prossimi esperimenti sull'utilizzo della memoria è rivolto agli accumulatori di schede (come me). Si chiama Elimina tab.

Non tutte le schede aperte sono schede utilizzate. Se la memoria è scarsa, Chrome può eliminare le schede in background non interessanti.

L'eliminazione delle schede è disponibile come esperimento in Chrome 46 e versioni successive.

Sfondo

Per ogni scheda aperta, il nostro processo di rendering richiede in genere circa 50 MB per scheda, anche se la maggior parte degli utenti utilizza una sola scheda alla volta. Se hai 10 schede aperte, vengono utilizzati almeno 450 MB di memoria solo per mantenere attivo lo stato della scheda in background. Questo può diventare un po' complicato nel tempo.

Memoria richiesta per scheda

Uno dei nostri obiettivi è ridurre la memoria utilizzata dalle schede che non utilizzi effettivamente. Se controllo quali schede stanno utilizzando la memoria di sistema in Gestione attività di Chrome, vedo che sto "utilizzando" solo uno o due dei siti indicati di seguito, mentre le altre schede in background non sono utilizzate.

Task Manager: memoria richiesta

È qui che l'eliminazione delle schede può aiutarci a ridurre l'utilizzo della memoria.

Eliminare le schede non utilizzate

L'eliminazione delle schede consente a Chrome di eliminare automaticamente le schede che non sono di tuo interesse quando viene rilevato che la memoria di sistema è in esaurimento. Che cosa intendiamo per eliminazione? Una scheda eliminata non va da nessuna parte. Lo abbiamo eliminato, ma è ancora visibile nella barra delle schede di Chrome. Se torni a una scheda eliminata, questa verrà ricaricata quando viene fatto clic. I contenuti del modulo, la posizione di scorrimento e così via vengono salvati e ripristinati nello stesso modo in cui lo sarebbero durante la navigazione tra le schede avanti/indietro.

Abbiamo anche un'altra nuova funzionalità che consente di memorizzare nella cache tutte le risorse delle schede localmente, il che funziona bene con l'eliminazione delle schede quando sei offline. Quando la scheda viene riattivata, ti offriamo la possibilità di ricaricare la versione memorizzata nella cache caricata in precedenza sulla rete. Per attivare il ricaricamento della pagina dalla cache, puoi provare un altro esperimento in chrome://flags/#show-saved-copy.

Puoi provare l'eliminazione delle schede oggi stesso attivandola tramitechrome://flags/#enable-tab-discarding e riavviando Chrome. Puoi controllare se è attivata o disattivata dalla stessa pagina chrome://flags di Chrome.

Attiva lo screenshot dell'eliminazione della scheda.
Screenshot del pulsante di riavvio.

Una nuova pagina chiamata chrome://discards ti consente di elencare le schede attualmente aperte e cerchiamo di condividere alcune informazioni su quanto siano interessanti (secondo noi) per te, dalla più alla meno interessante.

Screenshot della pagina Schede eliminate.

Per testare la funzionalità, puoi svolgere le tue normali attività di navigazione fino a quando il sistema non è in modalità di memoria ridotta oppure attivare l'eliminazione di una scheda da about:discards facendo clic su "Elimina scheda ora". L'ultima scheda dell'elenco verrà ignorata. Puoi anche ignorare una determinata scheda dall'elenco facendo clic sul pulsante "Ignora" corrispondente. Una scheda eliminata viene visualizzata con un prefisso [Eliminata].

Screenshot di esempio della scheda eliminata.

L'eliminazione delle schede avviene in questo ordine:

  • Pagine interne come la pagina Nuova scheda, i preferiti e così via.
  • Schede selezionate molto tempo fa
  • Schede selezionate di recente
  • App in esecuzione in una finestra
  • Schede bloccate
  • La scheda selezionata

Abbiamo attivato l'esperimento di eliminazione delle schede in Chrome Canary per Windows e Mac OS. A breve sarà disponibile un'implementazione per Linux.

Le schede bloccate vengono prese in considerazione anche per decidere se eliminare una scheda.

Ispirazione: hey there, great suspender

Se l'eliminazione delle schede ti suona familiare, è perché probabilmente hai trovato estensioni di Chrome utili che offrono una versione leggermente più semplice di questa idea, come The Great Suspender. L'obiettivo di The Great Suspender è ridurre l'impronta di memoria e GPU di Chrome mettendo in pausa le schede dopo un periodo di inattività personalizzato.

Screenshot della sospensione.

Analogamente all'eliminazione delle schede, le schede possono essere riattivate quando devi interagire nuovamente con esse. Great Suspender mantiene il titolo e la favicon di ogni scheda, mostrando le schede sospese in uno stato attenuato, in modo da potervi tornare facilmente in qualsiasi momento.

Screenshot dell'icona favicon delle schede sospese.

Le schede in background che non utilizzo attivamente sono state sospese, risparmiando memoria. Tuttavia, le schede che sto ancora utilizzando attivamente (GitHub e YouTube) continuano a funzionare normalmente.

Abbiamo avuto una conversazione molto interessante con l'autore dell'estensione Great Suspender mentre sviluppavamo l'eliminazione delle schede. È felice di vedere che stiamo affrontando in modo nativo questo problema in modi più efficienti di quanto potrebbe fare un'estensione, ad esempio la perdita dello stato delle inattività dell'utente.

Miglioramenti futuri: il serializzatore delle schede

Il serializzatore di schede è un progetto futuro che riteniamo possa portare a miglioramenti significativi del nostro attuale approccio all'eliminazione delle schede. Prende i contenuti di una scheda di Chrome e ne esegue la serializzazione dello stato *attuale* in un blob binario. Questo blob binario può essere deserializzato in una scheda in un secondo momento.

Il serializzatore serializzerebbe quasi tutto ciò di cui Chrome, Blink e V8 hanno bisogno per conservare correttamente una scheda (cosa che le estensioni di Chrome che affrontano questo problema non sono state storicamente in grado di ottenere facilmente). La serializzazione includerebbe i soliti sospetti: il DOM (con molti elementi WebGL e Canvas inclusi), il CSS e lo stato della VM JavaScript V8.

Screenshot del concetto di serializzazione

Se utilizzi Android o ChromeOS, potresti sapere che (in modo simile all'esperimento sull'eliminazione delle schede trattato in questo post) interrompiamo in modo aggressivo le schede in background per garantire un utilizzo ridotto della memoria. Il problema con il modo in cui abbiamo affrontato il problema è che la scheda perdeva *tutto* il suo stato.

Quando di nuovo avresti mostrato interesse per la scheda, dovremmo ricaricarla e tutte le tue interazioni con la scheda andrebbero perse. Il serializzatore di schede affronta questo problema in modo da farti tornare quasi esattamente a ciò che avevi prima, senza dover tornare alla rete. Non vediamo l'ora di condividere altre informazioni su questo progetto in un secondo momento.

Prova l'eliminazione delle schede e facci sapere cosa ne pensi

Ci piacerebbe sapere se questa funzionalità è utile per te e come potrebbe essere migliorata. Provala, giocaci (soprattutto se sei un accumulatore di schede) e facci sapere cosa ne pensi nei commenti. :) Ti invitiamo inoltre a segnalare eventuali bug riscontrati su crbug.com.