Firefox : optimisation des bases SQlite

J'entends beaucoup parler d'optimisation de navigateur avec des manipulations plus ou moins pertinentes à effectuer sans que le gains ne soit réellement mesuré. Aujourd'hui je vous propose une optimisation relativement triviale visant à nettoyer les bases SQlite utilisées par Firefox pour y stocker diverses informations.

Les pré-requis:

  • sqlite3 doit être installé
  • Firefox doit être fermé au moment des manipulations, faute de quoi les commandes à venir se solderont par un message vous informant que la base est verrouillée.

Mise en œuvre

les fichiers relatifs au profil utilisateur sont, par défaut, stockés dans le répertoire ~/.mozilla/firefox/*.default/. Nous allons donc optimiser tous les fichiers sqlite présents dans ce répertoire à l'aide de la commande suivante:

$ find ~/.mozilla/firefox/*.default/ -iname "*.sqlite" -exec sqlite3 {} 'VACUUM;' \;

Pour comprendre l'opération effectuée il suffit de se reporter à la documentation sqlite. La directive VACUUM vise à reconstruire dans son intégralité la base sqlite en compactant cette dernière au maximum. Pour le détail des actions effectuées par la commande je vous invite à lire l'excellente présentation de la documentation officielle. http://www.sqlite.org/lang_vacuum.html Voici une présentation de chacun des fichiers sqlite afin de mieux comprendre (Merci Gniarf):
urlclassifier3.sqlite : c'est la base qui est fournie par google pour la fonction anti-malware, ca pèse facilement 23 Mo a la sortie d'une installation. Si la fonctionnalité est désactivé vous n'avez donc pas besoin de stocker cette base.
cookies.sqlite : va contenir l'ensemble des cookies stockés par les différents sites visités.
places.sqlite : contient l'historique des pages visitées donc avec une rétention de 90 jours, ce fichier peut facilement atteindre 20Mo. Vous pouvez trouver une présentation exhaustive de cette base ici.
key3.db : c'est la base de mots de passes enregistrés dans firefox. Cette dernière est chiffrées et ne peut donc être accédée :

sqlite> SELECT name FROM sqlite_master WHERE type = "table";
Error: file is encrypted or is not a database

signons.sqlite : il fonctionne apparemment de paire avec la base key3.db. ce dernier n'est pas chiffré. On peut donc imaginer qu'il est utilisé pour accéder aux informations chiffrées de la base key3.db
downloads.sqlite : contient la liste de téléchargements lancés dans le navigateur.
content-prefs.sqlite : Contient les préférences individuelles appliquées à des pages. ici pour plus de détails le contenu (désolé la page n'était disponible que dans le cache google au moment ou j'écris).
premissions.sqlite : contient l'ensemble des préférences appliquées sur un site. On y liste donc les sites autorisés à utiliser ou non les cookies, ou encore afficher ou non des images.
formhistory : contient l'historique des formulaires saisis dans votre navigateur.
search.sqlite : contient la liste des différents moteurs de recherche intégrés au navigateur.
webappsstore.sqlite : contient les données au format DOM générées par les différents sites. plus de détails ici

Maintenant est-ce vraiment efficace ?

J'ai effectué mes tests sur un navigateur Firefox fraichement installée, je n'ai donc pas observé de changement significatif de performances. Cependant les chiffres parlent d'eux même. Voici donc les variations de taille que j'ai pu observer sur les différents fichiers SQLite une fois le nettoyage des base effectué. Optimisation des bases SQLite Firefox On constate que 3 bases (cookies.sqlite, urlclassifier3.sqlite, places.sqlite) ont fait l'objet d'un sérieux nettoyage et j'avoue avoir été surpris d'un tel gain après un temps si court d'utilisation. J'imagine donc largement à quel point cette optimisation peut s'avérer bénéfique dans le cas d'une utilisation prolongé de Firefox. J'ai entamé un suivi des bases sqlites constitutives du profil, nous pourrons ainsi voir l'évolution de ces dernières dans le temps et générer des jolis graphiques :). Voici donc comme promis un graphique représentant le bénéfice du compactage des bases dans le temps. compactage de base sqlite pour la version en taille originale vous pouvez la trouver ici

Liens connexes