Acelera Chromium y Google Chrome en Linux!


Pues eso. Que he vuelto después de unas vacaciones sin haber escrito nada, y quiero compartir esto :) No es que Chromium o Google Chrome flaqueen en cuanto a velocidad, de hecho me parecen los navegadores más rápidos a la par que completos y personalizables que existen. Pero en este post voy a enseñaros como agilizar aún más estos navegadores, moviendo su caché a la memoria RAM de nuestro ordenador, así que si te interesa sigue leyendo.

El proceso es bastante sencillo, y aunque en el blog que lo descubrí lo hacían de forma gráfica, a mí esto no me funcionaba. Estoy ahora utilizando ArchLinux (distribución Linux que recomiendo enormemente, si se quiere un sistema completamente personalizado y optimizado, además de estable y fiable... y duro), con GNOME 3.12, y el caso es que alacarte (el editor de menús para GNOME) no me dejaba editar la entrada de Google Chrome ni de Chromium. Por tanto, lo hice por terminal y santas pascuas.

Vamos al lío que es lo que os importa. Abrimos un terminal y a golpe de teclado vamos a editar el archivo "desktop" del navegador (el archivo que hace las veces de acceso a la aplicación). En mi caso, utilizo Google Chrome, pero el resultado será el mismo para Chromium editando el archivo chromium-browser.desktop:

sudo nano /usr/share/applications/google-chrome.desktop
Solo tenemos que buscar la línea Exec, que dependiendo de nuestro sistema puede variar, pero que siempre cumple lo mismo: ejecutar la orden con la que lanzar la aplicación. En mi caso, la línea era esta:
Exec=/usr/bin/google-chrome-stable %U

Y le añadimos lo siguiente para forzar que el caché del navegador se cargue en nuestra memoria RAM (todo en una sola línea):
Exec=/usr/bin/google-chrome-stable %U --disk-cache-dir="/tmp/ram/"

Con esto, matamos 2 pájaros de 1 tiro. Primero, conseguimos que la carga de caché de las páginas sea mucho más rápida, ya que la RAM es más rápida que el disco duro. Segundo, conseguimos limpiar un poco nuestro sistema ya que lo que se guarda en RAM se borra al apagar el ordenador, con lo que podemos ahorrar unos 500-700MB de datos de caché, el cual se ubica en ~/.cache/google-chrome . Con eliminar esa carpeta de caché conseguiremos liberar ese espacio, la cual ya no necesitaremos más, pues usaremos la RAM.

Por cierto, cada vez que actualicemos el navegador (sea Google Chrome o Chromium), tendremos que repetir el proceso.

Fuente - Ubuntizando

Actualización: Gracias al lector flipefr, podemos hacer todo esto de manera automática en ArchLinux, cada vez que actualicemos Google Chrome.
El siguiente script facilitado por el  lector actualizará Google Chrome (entre otros) y reemplazará la línea ya citada en el acceso directo por la nueva con la opción de caché en RAM. Este script es compatible con otros sistemas Linux, siendo necesario en su caso reemplazar la orden de actualización por la del sistema que utilizemos (por ejemplo, por un sudo apt-get update && sudo apt-get upgrade en Debian, Ubuntu y derivados). En caso de utilizar Chromium, bastará de nuevo con cambiar los respectivos archivos y lanzadores por los de Chromium, como ya se explicó anteriormente. Sin más, os dejo el script (solo es necesario copiar y pegar, por el ajuste de línea de Blogger pueden aparecer saltos de línea donde no los hay):

#!/bin/bash

yaourt -Syyua --devel
sudo chmod a+w /usr/share/applications/google-chrome.desktop
file=/usr/share/applications/google-chrome.desktop

if [ $(grep "Exec=/usr/bin/google-chrome-stable %U" $file | wc -c) -le 38 ]; then
sed -e 's/%U/%U --disk-cache-dir="\/tmp\/ram\/"/g' $file > .tmp
cp .tmp $file;rm .tmp
fi

rm -rf ~/.cache/google-chrome

8 comentarios :

  1. Marchando una de script
    Digamos que se llama actualizar.sh

    yaourt -Syyu --devel --aur
    file=/usr/share/applications/google-chrome.desktop
    words=$(echo "$(sed -e 's/Exec=\/usr\/bin\/google-chrome-browser %U/Exec=\/usr\/bin\/google-chrome-browser %U --disk-cache-dir="\/tmp\/ram\/"/g' $file)" | grep "Exec=/usr/bin/google-chrome-browser %U" | wc -c)

    if [ $words -le 68 ]; then

    echo "$(sed -e 's/Exec=\/usr\/bin\/google-chrome-browser %U/Exec=\/usr\/bin\/google-chrome-browser %U --disk-cache-dir="\/tmp\/ram\/"/g' $file)" > $file

    fi
    rm -rf ~/.cache/google-chrome

    ResponderEliminar
  2. Me corrijo, ese script no funciona por estar hecho a la carrera me he dado cuenta tarde, ahí va una versión mas limpia y probada

    yaourt -Syyu --devel --aur
    file=/usr/share/applications/google-chrome.desktop
    if [ $(grep "Exec=/usr/bin/google-chrome-stable %U" $file | wc -c) -le 38 ]; then
    sed -e 's/%U/%U --disk-cache-dir="\/tmp\/ram\/"/g' $file > .tmp
    cp .tmp $file;rm .tmp
    fi
    rm -rf ~/.cache/google-chrome

    para que funcione deberiamos dar permisos de escrito al usuario sobre el fichero /usr/share/applications/google-chrome.desktop con chmod y asi no nos pide siempre la contraseña, en caso de no querer cambiarlos ejecutar toda la parte despues del yaourt con un sudo en un fichero independiente

    ResponderEliminar
  3. O_O... Joder, y perdón por la expresión pero anonadado me hayo. No lo habría hecho tan birn ni de lejos xD Muchísimas gracias por el aporte. Editaré el post para incluir tu script, si no te importa, porque merece la pena compartirlo y que no se pierda en estos comentarios. Da gusto volver a escribir con comentarios como este :) De nuevo mil gracias ^^


    PD: Por cierto, no sé si entiendo bien el uso de pacman y yaourt (al fin y al cabo termina usando pacman), pero al actualizar el programa, ¿no sobrescribiría el archivo por uno generado nuevamente por pacman? Lo digo porque puede que aunque se modifiquen los permisos de escritura, puede que tras actualizar, sea necesario nuevamente dar estos permisos al usuario. De ser así, la solución podría ser fácil incluyendo esta modificación de los permisos con chmod justo después de la ejecución de yaourt en el script. Si no es así, repito que hablo un poco desde la ignorancia, pues no sé si se mantendrían estos permisos modificados tras la actualización.
    Aún así, de nuevo gracias por el trabajo de investigación que me has ahorrado, así da gusto :)

    ResponderEliminar
  4. Por supuesto que puedes ponerlo en el post, para eso lo he hecho, incluso creo que aun se podria refinar mas poniendo el sed en una sola linea como hice al principio, pero mejor dejarlo asi que funcoina y tampoco es tan grande.

    La diferencia entre yaourt y pacman es que pacman es digamos el oficial, mientras que yaourt es una aplicacion que envuelve a pacman, la idea es que solo se deberia instalar lo que viene en pacman por motivos de seguridad y estabilidad, pero como hay muchas cosas que no son digamos oficiales esta yaourt que lo que hace es decargar el codigo de los repositorios y compilarlo, si un paquete o programa no esta en pacman es muy posible que se pueda encontrar con yaourt, no obstante hay gente que recomienda no usarlo precisamente por motivos de seguridad y estabilidad dado que siempre puedes instalar algo que metas la pata, mismo motivo que te avisa de no usarlo nunca con sudo, dado que si compilas como root a saber que puede pasar, mas info en la wiki https://wiki.archlinux.org/index.php/yaourt
    de las opciones que le paso ahi significan:
    "-Syyu": fuerza a yaourt a descargar las últimas listas de paquetes de los repositorios (a veces con "-Syu" no descarga las últimas lista, por eso usamos "-Syyu").
    "--devel": comprueba y actualiza si es necesario los programas que hayamos instalado con subversion, hg, git y cvs.

    "--aur": actualiza los paquetes que tengamos instalados desde el repositorio AUR si es necesario.

    El fichero /usr/share/applications/google-chrome.desktop como su nombre indica es un fichero desktop, es decir, no es mas que un acceso directo de toda la vida, cambiar el programa no deberia implicar cambiar el acceso directo, solo cambiara en el caso de que cambie la ubicacion del chrome y eso no va a pasar, asi que me atreveria a afirmar que por muchas actualizaciones que les hagas al chrome el .desktop no se va a ver afectado. De todas formas siempre puedes comprobar los permisos despues de actualizar chrome para ver si ha cambaido algo con el "ls -l"

    En el caso de que se cambien los permisos no bastaria con hacer un chmod 777 /usr/share/applications/google-chrome.desktop dado que te pedira de nuevo la contraseña de root, seria mejor solucion ejecutar el script con un sudo y quitarse de problemas, algo asi como sudo chrome-ram.sh, este script solo llevaria la parte que va de file hacia el final, pero no la linea del yaourt por lo que he dicho antes de los peligros de compilar en modo root.

    Ya esta, a lo mejor me equivoco, pero que aproveche.

    ResponderEliminar
  5. Sí, gracias por la explicación con respecto a yaourt y pacman (y esa parte del funcionamiento), hasta ahí llego. Pero me refiero a que ese fichero puede cambiar porque de hecho cambia cada vez que se actualiza Chrome, es decir, el fichero vuelve a tener el contenido original, pues la opción que agregamos al lanzador (--disk-cache-dir="/tmp/ram/") desaparece y es necesario incluirla de nuevo cada vez.


    Es por esto por lo que pienso que no bastará con cambiar los permisos, pues yaourt (pacman utilizado por yaourt) regenerará el acceso directo a la aplicación, o al menos es la única explicación que veo a que cambie este contenido del fichero.


    Aún así se podría incluir ese chmod a+w (por ejemplo, dando permiso a todos para la escritura), y bueno, pedirá la contraseña de sudo, pero seguiremos teniendo este fantástico script que ahorra mucho trabajo, como tener que abrir un editor de texto y añadir la citada opción.

    ResponderEliminar
  6. Tambien es verdad, eso ya como tu veas.

    ResponderEliminar
  7. Excelente entrada, aunque me tiene intrigado el parámetro "%U" que sigue a la ruta del programa ejecutable en el valor de la clave "Exec" dentro del fichero del lanzador de la aplicación (archivo ".desktop"). ¿sabes para qué sirve este parámetro?

    Al parecer, sucede en ocasiones que cuando instalamos el visor de pdfs "Adobe Reader" no aparece esta aplicación en la lista de programas con los cuales podemos abrir un fichero pdf cualquiera. La solución consiste en añadir el parámetro "%f" al valor de la clave "Exec" asociada al fichero del lanzador de la mencionada aplicación, como se explica en esta página web:

    Añadir un programa a la lista de aplicaciones con la que se abre cierto tipo de fichero con Nautilus

    Oye Raúl, tengo una idea para una entrada que trata sobre la instalación de Adobe Reader en Ubuntu 14.04, ¿estarías dispuesto a publicarla en tu blog si te la envío por correo electrónico?



    Un saludo a los lectores del blog.

    ResponderEliminar
  8. En primer lugar, gracias por el comentario y por la felicitación. Al igual que a ti, a mí también me picaba la curiosidad con respecto a este parámetro, y resulta que simplememte significa que los argumentos que se pasen al ejecutable (google-chrome en este caso), será una lista de URLs o rutas hacia archivos locales. Para más info te dejo la misma pregunta en StackOverflow: http://askubuntu.com/questions/30210/what-does-u-mean-when-calling-a-command


    Y en cuanto a la idea sobre la entrada de Reader, perfecto. Actualmemte cuento con algo sobre Adobe Reader que ya me pasó otro colaborador, pero mientras más info y más contenido, mejor! Te animo a que me envíes un correo a la dirección de contacto (el del blog) para tenerlo en cuenta cuando escriba la entrada :)


    Un saludo!

    ResponderEliminar