Eliminazione di schede in Chrome - Un esperimento per risparmiare memoria

Addy Osmani
Addy Osmani

La riduzione dell'utilizzo della memoria di Chrome è una delle principali priorità per il team quest'anno. Abbiamo già registrato una riduzione fino al 45% nell'utilizzo della memoria di Gmail grazie ai miglioramenti nel processo di garbage collection di V8, ma questo è solo l'inizio. Uno dei nostri prossimi esperimenti sull'utilizzo della memoria è rivolto agli accaparratori di schede (come me). Si chiama Eliminazione delle schede.

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

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

Contesto

Il processo di rendering di ogni scheda aperta richiede di solito circa 50 MB per ogni scheda, anche se la maggior parte degli utenti utilizza una sola scheda alla volta. Se hai 10 schede aperte, ci sono almeno 450 MB di memoria spesi solo per mantenere lo stato della scheda in background. Può diventare un po' ingombrante con il passare del tempo.

Memoria richiesta per scheda

Uno dei nostri obiettivi è ridurre la memoria utilizzata per le schede che non effettivamente usi. Se osservo quali schede consumano la memoria di sistema in Chrome Task Manager, in realtà sto semplicemente "utilizzando" uno o due dei siti elencati di seguito, mentre le altre schede in background non sono utilizzate.

Task Manager con memoria richiesta

È qui che l'eliminazione delle schede può contribuire a ridurre l'utilizzo di memoria.

Eliminazione delle schede non utilizzate

L'eliminazione delle schede consente a Chrome di eliminare automaticamente le schede che non sono di grande interesse quando viene rilevato che la memoria di sistema è quasi esaurita. Che cosa si intende per "ignoramento"? Una scheda eliminata non va da nessuna parte. Lo eliminiamo ma è ancora visibile nella tabstrip di Chrome. Se torni a una scheda che è stata ignorata, questa viene ricaricata quando l'utente fa clic. I contenuti del modulo, la posizione di scorrimento e così via vengono salvati e ripristinati come lo sarebbero durante la navigazione nella scheda Avanti/Indietro.

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

Puoi provare a ignorare le schede oggi stesso attivandole tramite chrome://flags/#enable-tab-discarding e riavviando Chrome. Puoi controllare se è attivato o disattivato tramite la stessa pagina chrome://flags di Chrome.

Attiva screenshot per ignorare le schede.
Screenshot del pulsante Riavvia.

Una nuova pagina chiamata chrome://discards ti consente di elencare le schede attualmente aperte e cerchiamo di condividere alcune informazioni su quanto siano interessanti per te, in ordine decrescente.

Screenshot della pagina Schede eliminate.

Per testare la funzionalità, puoi eseguire il normale comportamento di navigazione finché il sistema non è in modalità di memoria ridotta o, in alternativa, attivare una scheda eliminata da about:discards facendo clic su "Elimina scheda ora". L'ultima scheda dell'elenco verrà ignorata. Puoi anche eliminare una determinata scheda dall'elenco facendo clic sul pulsante "Elimina" corrispondente. Una scheda eliminata verrà visualizzata con il prefisso [Eliminato].

Screenshot di esempio di una scheda ignorata.

Se una scheda viene ignorata, le schede vengono ignorate nel seguente ordine:

  • Pagine interne come pagina Nuova scheda, 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 sull'eliminazione delle schede in Chrome Canary per Windows e Mac OS e a breve sarà disponibile un'implementazione Linux.

Le schede bloccate vengono prese in considerazione anche quando decidi se eliminare una scheda

Ispirazione: ciao brava, grande bretelle

Se il fatto di ignorare le schede ti suona familiare, è perché probabilmente hai trovato utili estensioni di Chrome che ti danno una versione leggermente più semplice di questa idea, come The Great Suspensioner. The Great Suspensioner mira a ridurre l'utilizzo di memoria e GPU di Chrome sospendendo le schede dopo un periodo di inattività personalizzato.

Screenshot della sospensione.

Analogamente a quanto accade per ignorare le schede, anche le schede possono essere annullate quando è necessario interagire di nuovo con esse. Great Sospendier mantiene il titolo e la favicon di ogni scheda, mostrando le schede sospese in uno stato attenuato per poter tornare indietro in qualsiasi momento.

Screenshot della favicon delle schede sospese.

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

In effetti, abbiamo parlato molto bene con l'autore dell'estensione Great Suspensioner durante lo sviluppo della rimozione di una scheda e sono lieti di vederci affrontare questo problema in modo nativo in modi più efficienti di quanto potrebbe fare un'estensione, ad esempio perdere lo stato delle inazioni dell'utente.

Miglioramenti futuri: il serializzatore di schede

Il serializzatore di schede è un lavoro futuro che riteniamo possa portare a miglioramenti significativi nel nostro attuale approccio all'eliminazione delle schede. Recupera i contenuti di una scheda di Chrome e serializza il suo stato *attuale* in un blob binario. Questo blob binario può essere deserializzato in una scheda.

Il serializzatore serializza quasi tutto ciò di cui Chrome, Blink e V8 hanno bisogno per preservare correttamente una scheda (qualcosa che le estensioni di Chrome che storicamente non sono riusciti a raggiungere 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 serializzatore

Se utilizzi Android o ChromeOS, potresti sapere che (come nel caso dell'esperimento di eliminazione di una scheda illustrato in questo post) le schede in background vengono terminate in modo aggressivo per garantire che la memoria utilizzata sia ridotta. Il problema con il modo in cui affrontiamo questo problema era che la tua scheda perdeva *tutto* il suo stato.

Quando hai mostrato di nuovo il tuo interesse per la scheda, dovremmo ricaricarla e tutte le tue interazioni con la scheda sono andate perse. Il serializzatore di schede affronta questo problema in modo da farti tornare quasi esattamente ciò che stavi facendo, senza dover tornare alla rete. Ci auguriamo di poter condividere ulteriori informazioni su questo lavoro in un secondo momento.

Prova a eliminare le schede e facci sapere cosa ne pensi

Ci piacerebbe sapere se questa funzione è utile per te e come potrebbe essere migliorata. Provala, provaci (soprattutto se sei un accaparratore di schede) e facci sapere cosa ne pensi nei commenti. :) Apprezzeremmo anche se inviassi ticket per eventuali bug riscontrati su crbug.com.