Firefox 3.7 avrà una migliore gestione della cronologia
Ecco il nuovo componente per la scadenza della cronologia
La scorsa settimana ho implementato su mozilla-central un nuovo componente per la scadenza delle pagine dalla cronologia, i dettagli originali del progetto sono disponibili a questo pagina wiki.
Un po' di storia
Originariamente la scadenza delle vecchie pagine era gestita direttamente dal componente Cronologia, in tre passi: dopo ogni visita, durante i tempi di inattività, alla chiusura del programma. Questo dava origine a svariati problemi. Prima di tutto aveva un impatto sulla navigazione, rendendola meno fluida, abbiamo quindi spostato l'espirazione dall'avvenire dopo ogni visita all'avvenire ad ogni sincronizzazione tra le tabelle in memorie e quelle su disco. Abbiamo anche ridotto la quantità di dati rimossi alla chiusura del programma.
I risultati erano migliori ma si erano generati nuovi problemi: non eliminavamo abbastanza pagine rispetto al numero di visite ed il componente di sincronizzazione era ora sovraccaricato di funzioni per l'espirazione, quindi più lento. Inoltre stavamo ancora eseguiendo troppi compiti alla chiusura.
Con il bug 516940 ho ripulito la procedura di chiusura del componente Cronologia, separando meglio al contempo tutto il codice riguardante la scadenza delle pagine. A questo punto pensare ad una separazione fisica in un nuovo componente è stato piuttosto ovvio.
Quali sono le novità?
Il nuovo componente è in Javascript, esegue un passo di espirazione ogni 3 minutes, con un algoritmo adattivo molto semplice: se l'ultimo passo ha trovato meno risultati del previsto, il prossimo passo viene ritardato, al contrario se li ha trovati tutti il prossimo passo è più aggressivo. Questo assicura che non restiamo indietro nell'espirare le pagine
Inoltre il componente utilizza la nuova API asincrona di Storage, in questo modo l'I/O viene spostato dal thread principale (l'interfaccia) in un thread secondario. In questo modo non inficiamo la navigazione dell'utente!
L'espirazione durante inattività esegue un singolo passo più grande, quindi si interrompe finchè non cessa l'inattività, in questo modo preserveremo il modo di standby e la durata delle batterie, in particolare su dispositivi mobili. E' ancora previsto un piccolo passo alla chiusura, ma nei casi più comuni dovrebbe risultare pressochè vuoto.
Cosa ti devi aspettare?
Il nuovo componente è in grado di utilizzare le specifiche hardware del dispositivo su cui gira per adattare automaticamente le dimensioni della cronologia. Ciò significa che non è più necessario impegnarsi per trovare il giusto compromesso per il proprio computer. Per questo motivo ho rimosso il campo che consente di impostare il numero di giorni di cronologia da mantenere, non dovrai più dirci quanti giorni di cronologia il tuo computer può gestire!
E la privacy? Beh, ne abbiamo discusso attentamente, e siamo giunti alla conclusione che impostare un basso numero di giorni di cronologia non forniva alcuna vera privacy in più. Infatti:
- La preferenza impostava i giorni minimi di cronologia, per molti utenti il cambio è quindi stato un falso placebo
- Siccome l'espirazione è un processo asincrono per definizione non potrai mai sapere quando le pagine sono veramente rimosse dal nostro database
- anche se riduci la cronologia a 6 giorni, nessuno garantisce che tu non possa avere una pagina scomoda durante quel periodo
Siccome abbiamo dei migliori stumenti per la privacy (e possiamo aggiungerne altri, sentiti libro di suggerire modifiche) come Cancella cronologia recente, Navigazione anonima and Dimentica questo sito, la scelta è stata semplice, vogliamo una privacy reale e non apparente.
Anche le preferenze sull'espirazione sono stare rimosse quindi browser.history_expire_days, browser.history_expire_days_min, browser.history_expire_sites sono ora state sostituite dalla singola places.history.enabled preference.
Cosa è ancora possibile modificare? Idealmente nulla, e non hai la necessità di modificare nessuna preferenza. Ma per informazione abbiamo due nuove preferenze nascoste: places.history.expiration.interval_seconds è il numero di secondi tra i passi di espirazione, mentre places.history.expiration.max_pages è il massimo numero di pagine uniche conservate prima dell'espirazione. Faremo del nostro meglio per garantire la bontà dei valori predefiniti per tutti gli utenti.
Infine cosa ci hai guadagnato?
Una cronologia più veloce, più sicura ed una navigazione più reattiva. Tutto questo al prezzo di una privacy apparente. Vittoria!


