Como espolear al zorro de fuego

Puedo presumir -y presumo- de ser un usuario (más que) fiel del navegador web Firefox. Exáctamente desde la versión 0.7, cuando aún se llamaba Firebird y yo aún me encontraba en territorio Güindow. Eso quiere decir que ya he perdido la cuenta de los años que llevo utilizándolo de manera ininterrumpida. Durante todo este tiempo no me han faltado ganas ni oportunidades de sustituirlo por otros navegadores (Chromium y Epiphany, principalmente); pero nunca he consumado la traición por la pereza que produce el tener que cambiar de habitat y acomodarme a los ecosistemas de otros navegadores. Y para qué ocultarlo, … no lo he hecho porque los que he probado tampoco me han convencido más que el navegador de Mozilla.

El caso es que, durante años, una de las inquietudes que me han atormentado constantemente es tratar de mejorar mi experiencia de usuario con este navegador a través de la optimización de los ajustes de configuración, requisito necesario para poder sacarle el máximo provecho y mejorar la velocidad de navegación por la MMM 1; pues resulta evidente que la configuración predeterminada de Firefox no es, precisamente, la que mejor se adapta a las necesidades de la mayoría de sus usuarios. Y aunque los factores que influyen en esa velocidad de navegación son múltiples e incontrolables (ancho de banda de la conexión, velocidad de resolución de los DNS, calidad de la señal WiFi, potencia de la CPU, rendimiento de la tarjeta de red o velocidad de acceso al disco duro, entre otros), existen ciertos elementos sobre los cuales es posible intervenir para intentar mejorar las prestaciones de Firefox.

¿Por qué Firefox no va rápido?

Uno de los cuellos de botella que impide el funcionamiento fluido de Firefox y lastra su rendimiento es, precisamente, la imperiosa necesidad de acceder frecuentemente al disco duro para:

  • por una parte, almacenar o actualizar los ficheros contenidos en el directorio ~/.mozilla relativos a la conformación de los perfiles de usuario (marcadores, historial de navegación, sesiones de navegación, galletas –cookies-, complementos, temas visuales, plugins de búsqueda y otros datos 2)
  • y, por otra parte, refrescar los datos de la caché, almacenados en el directorio ~/.cache/mozilla/firefox/, a donde van a parar los ficheros temporales de las páginas visitadas más recientemente.

El continuo trasiego de lecturas y escrituras en disco provocado por dichos accesos produce una ralentización que se hace notable al abrir simultáneamente varias pestañas con sitios web más o menos pesados. Por tal motivo, es más que deseable encontrar una fórmula que permita minimizar la reiteración de tales accesos al disco, o bien hacerlos innecesarios. Sobre esta última opción se fundamenta la solución que propongo a continuación.

¿Qué se puede hacer para acelerarlo?

Con el fin de evitar que Firefox tenga que realizar continuos accesos a cualquier soporte de almacenamiento, sería preciso que tanto la caché como los perfiles de usuario no se encontrasen almacenados en ninguno de dichos soportes mientras Firefox está en ejecución. Pero como en algún sitio han de estar, podríamos situarlos provisionalmente en la memoria RAM, cuya velocidad de acceso es notablemente mayor. Y para lograrlo deberemos de seguir una serie de instrucciones que paso a detallar.

Aviso
para que esta solución sea viable, es recomendable que la memoria RAM del ordenador tenga como mínimo 2 Gigabytes de tamaño.
Estas instrucciones deben ponerse en práctica tras asegurarse de haber cerrado todas las ventanas abiertas de Firefox.

  1. Es bien sabido que Firefox proporciona una página que nos permite ver y modificar los valores de una serie de variables de configuración, las cuales permiten personalizar su interfaz y modelar su comportamiento. Accedemos a dicha página a través de la dirección about:config y, tras aceptar el mensaje de aviso que nos invita a ser prudentes, iremos buscando una a una cada variable, modificando -si procede- su valor mediante un doble clic sobre el nombre de la variable. De esa manera vamos a cambiar los valores de las siguientes preferencias:
    • browser.cache.use_new_backend1 (esta variable mejora la eficiencia de la memoria caché)
    • network.http.pipelining.ssltrue
    • network.http.pipeliningtrue
    • network.http.proxy.pipeliningtrue
    • network.http.pipelining.maxrequests → asignarle cualquier valor superior a 100 (110 podría valer)
    • network.dns.disableIPv6true (solo si no se está usando IPv6)
    • browser.safebrowsing.enabled y browser.safebrowsing.malware.enabledfalse (no se recomienda, aunque tampoco creo que vaya a pasar nada).
      Es posible que las dos últimas variables (las que incluyen safebrowsing) no existan y deban ser creadas 3.
  2. A continuación procederemos a mover la caché, estableciendo la memoria RAM como su área de almacenamiento. Para ello, sin salir de about:config, modificaremos el contenido de las siguientes variables:
    • browser.cache.disk.enablefalse (deshabilitamos la caché del disco)
    • browser.cache.memory.enabletrue (y habilitamos la de la memoria)
    • browser.cache.memory.capacity-1 (a la cual le asignamos una capacidad variable, aunque también se le podria asignar una cantidad fija en Kb, por ejemplo 204800 -200 Mb-).
      Si alguna de estas variables no existiera de antemano, se pueden crear pulsando en el botón derecho del ratón sobre un área vacía de la ventana, seleccionando la opción Nuevo del menú contextual y luego el tipo de variable que queremos crear: Entero para la variable de capacidad y Si/No para las otras dos.
  3. Y, por último, vamos a mover el perfil de usuario a una unidad de almacenamiento temporal, situada en la RAM. Crear una unidad de almacenamiento en memoria RAM es posible gracias a tmpfs, un sistema de ficheros que permite ser montado en la memoria volátil para contener temporalmente archivos accesibles a través de una ruta de directorios que actúa como punto de montaje. El proceso es el siguiente:
    • desde Firefox acceder a preferenciasprivacidadmostrar cookieseliminar todas para borrar todas las galletas de los sitios web. Y luego a preferenciasavanzadoredlimpiar ahora para borrar todo el contenido almacenado en la cache.
    • desde la terminal de comandos, hacer una copia de seguridad de los datos del perfil predeterminado de Firefox:
       $ cd ~/.mozilla/firefox/
       $ cp -a xxxx.usuario/ profile.bac
       $ rm -rf xxxx.usuario/*
       

      donde xxxx.usuario es el nombre del directorio del perfil de usuario con el cual usamos habitualmente Firefox (siendo xxxx una cadena alfanumérica). De tal forma, esta secuencia de comandos crea un directorio (~/.mozilla/firefox/profile.bac) en el que serán conservados los datos del perfil. Posteriormente eliminaremos el contenido del directorio original.

    • a continuación vamos a editar el fichero /etc/fstab para realizar el montaje del sistema de ficheros de tmpfs en el directorio que contenía los datos del perfil:
       $ sudo nano /etc/fstab
       ...
       tmpfs /home/$USER/.mozilla/firefox/xxxx.usuario tmpfs size=160M,user,exec,uid=1000,gid=1000 0 0
       

      El tamaño de la partición (indicado en el parámetro size) ha de ser suficientemente amplio para contener todos los datos del perfil de usuario, cuyo tamaño dependerá de diversos factores. Con 150 Mb. debería ser suficiente, pero es posible que se necesite más, o menos, en función de las necesidades de cada instalación. La manera de averiguar si hemos especificado una cantidad óptima es salir del editor, guardando los cambios aplicados al fichero /etc/fstab y, a continuación, ejecutar:

       $ sudo mount -a
       
       

      o bien:

       $ sudo mount -o remount tmpfs
       
       

      y a continuación, si no nos ha devuelto ningún mensaje de error, ejecutar:

       $ df -halT
       S.ficheros     Tipo            Tamaño Usados  Disp Uso% Montado en
       rootfs         -                    -      -     -    - /
       sysfs          sysfs                0      0     0    - /sys
       proc           proc                 0      0     0    - /proc
       udev           devtmpfs           10M      0   10M   0% /dev
       devpts         devpts               0      0     0    - /dev/pts
       tmpfs          tmpfs             191M   688K  190M   1% /run
       tmpfs          tmpfs             5,0M   4,0K  5,0M   1% /run/lock
       pstore         pstore               0      0     0    - /sys/fs/pstore
       tmpfs          tmpfs             447M   1,7M  445M   1% /run/shm
       fusectl        fusectl              0      0     0    - /sys/fs/fuse/connections
       tmpfs          tmpfs             160M   112M   49M  70% /home/***/.mozilla/firefox/xxxx.***
       

      Vemos que los datos del perfil de usuario de Firefox, que están almacenados en el último punto de montaje de tmpfs, ocupan un 70% de la capacidad asignada a la unidad de almacenamiento en RAM; por tanto, el tamaño de dicha unidad es adecuado. Si al ejecutar mount nos devuelve un mensaje de error significa que debe asignarse un tamaño mayor.
      Ahora volvemos a copiar en el directorio recién montado todos los datos contenidos en el directorio creado anteriormente como copia de seguridad:

       $ cd ~/.mozilla/firefox/
       $ cp -a profile.bac/* xxxx.usuario/
       

      Ni que decir tiene que debe sustituirse $USER por el nombre de usuario con el cual accedemos al sistema Linux, y xxxx.usuario por el nombre de la carpeta que contiene los datos del perfil de nuestro usuario de Firefox.

    • Mientras estemos navegando con Firefox se irán produciendo modificaciones en varios archivos (por ejemplo, en los de tipo SQLite) situados en el sistema de ficheros temporal, por lo que tales modificaciones se perderán si esos archivos no son copiados en disco. Para que esa copia se produzca de manera periódica y automática, será necesario crear un guión 4 que será ejecutado cada cierto tiempo. Pero, en primer lugar, hay que comprobar si tenemos instalado el paquete rsync, en caso negativo habrá que instalarlo:
       $ sudo aptitude install rsync
       
       

      después creamos el guión con nuestro editor preferido:

       $ nano ff_sinc_perfil
       #!/bin/bash
       rsync -a --delete /home/***/.mozilla/firefox/xxxx.usuario/ /home/***/.mozilla/firefox/profile.bac/
       

      lo guardamos en un directorio (por ejemplo, en .guiones) y le damos permisos de ejecución:

       $ chmod 755 .guiones/ff_sinc_perfil
       
       

      luego debemos añadir dicho guión a nuestra lista de tareas programadas periódicas:

       $ crontab -e
       */5 * * * * /home/***/.guiones/ff_sinc_perfil > /dev/null 2>&1
       

      La línea añadida hace que cada cinco minutos se sincronice el contenido del directorio de trabajo (.mozilla/firefox/xxxx.usuario) con el de copia de seguridad (.mozilla/firefox/profile.bac/). Se puede establecer el intervalo de tiempo que deseemos con solo sustituir 5 por el número de minutos que queramos. Así que guardamos los cambios y salimos del editor de crontab.

    • Y para finalizar, debemos hacer notar que, cada vez que iniciemos el sistema, el directorio del perfil donde montamos el sistema de ficheros temporal se encontrará vacio, pues la memoria en la que se halla es volátil. Por tanto, cada vez que iniciemos el sistema es necesario realizar una restauración desde el directorio situado en el disco, donde se han sincronizado todos los ficheros modificados durante la sesión anterior, con el fin de copiar al directorio de trabajo los datos del perfil de usuario. Lo haremos insertando el siguiente comando en la penúltima línea del fichero /etc/rc.local, justo antes de exit 0:
       $ sudo nano /etc/rc.local
       ...
       cp -a /home/***/.mozilla/firefox/profile.bac/* /home/***/.mozilla/firefox/xxxx.usuario/
       exit 0
       

      Luego salvamos los cambios y salimos.

  4. Y ya solo queda reiniciar el sistema y ejecutar Firefox para comprobar que sigue conservando su aspecto, sus funcionalidades, complementos, marcadores, etc. De esta manera, al no tener que acceder a ningún disco, solo a memoria RAM, empezaremos a notar que Firefox gana en velocidad, estabilidad y agilidad a la hora de arrancar y mostrar sitios web.

Epílogo

Hacía tiempo que quería probar esta solución para ver si mejoraba el funcionamiento de Firefox en mi modesto equipo y dejaban de producirse los frecuentes atascos que había sufrido hasta entonces; y debo reconocer que el resultado ha sido espectacular, a pesar de los dos escasos Gb de RAM que posee mi ordenador. Por lo cual intuyo que, en sistemás con más capacidad de memoria, el rendimiento debe ser aún más espectacular.

De hecho, la prueba del algodón que suelo aplicar cuando quiero comprobar la eficacia de una nueva configuración es acceder a la página de Google Street View y darme un paseo virtual por algún sitio. Si el navegador (y el sistema) no se bloquea a los pocos minutos es señal de que lo he ajustado correctamente, como así ha sido en este caso.


  1. Más conocida como WWW 
  2. Muchos de esos datos se almacenan en bases de datos SQLite, que, ya de por sí, son manifiestamente lentas. 
  3. En el caso de mi navegador, solo existía previamente la variable browser.safebrowsing.malware.enabled. La otra no estaba presente, y tampoco me molesté en crearla, por lo cual me inclino a pensar que no son imprescindibles. 
  4. Para los que no saben español, un script
Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s