Snabba upp Firefox

För varje år som går blir webbläsaren allt viktigare. Istället för att bara surfa kan man nu även göra saker som att läsa e-post, chatta, skriva dokument i ”molnet”, titta på strömmande video, spela spel m.m. Men ju fler features utvecklarna klämmer in i stackaren desto större, klumpigare och långsammare blir den. Ett litet trick för att snabba upp webbläsaren är att lägga cachen i minnet istället för på disk. Läs vidare om du är intresserad.

Cache

Cache är ett slags mellanlager för att snabba upp återkommande läsningar. Datorns CPU använder ofta sådana mellanlager (för att slippa accessa vanliga minnet igen för att läsa en adress den nyss har läst), men här handlar det om en katalog på disken där webbläsaren mellanlagrar saker (bilder, html-kod, javascript, stylesheets, cookies etc). Tyvärr är datorns disk väldigt långsam, i alla fall jämfört med minnet. Tricket här är att ändra webbläsarens cachekatalog till en symbolisk länk som pekar till en katalog i minnet.

Ramdisk GNU/Linux

En katalog som ser ut att ligga på disken, men egentligen ligger i minnet, kallas ramdisk. Under GNU/Linux kan man lägga katalogen /tmp i minnet genom att lägga till följande rad i filen /etc/fstab:

tmpfs  /tmp  tmpfs  defaults,noatime,mode=1777  0 0

Efter att datorn bootats om kommer allt som läggs under /tmp i verkligheten hamna i minnet. Redan nu kommer vissa saker gå snabbare. Kompilatorn gcc mellanlagrar t.ex. filer under /tmp under kompilering (om inte flaggan -pipe ges) så kompilering kommer automatiskt gå snabbare nu. Men för webbläsaren behövs lite mer trix.

Firefox Cache -> Ramdisk

Användarens hemkatalog brukar skrivas som ~/. Om användaren heter albert hamnar hemkatalogen typiskt under /home/albert i GNU/Linux medan den hamnar under /Users/albert på en mac (som kör OS X). I fortsättningen skriver jag bara ~/ för hemkatalogen.

Firefox skapar olika profiler för användare. En användare kan ha flera profiler, men typiskt används bara en. Titta under ~/.mozilla/firefox/ på GNU/Linux eller ~/Library/Caches/Firefox/Profiles/ på OS X för att se namnet på profilen. Typiskt 8 slumpmässiga bokstäver följt av .default, t.ex. tjgsuein.default. Någonstans där under mellanlagrar Firefox sina filer.

Här är ett shellscript för OS X som länkar katalogen till /tmp/firecache (se längre ner hur /tmp ändras till ramdisk under OS X).

#!/bin/sh

TMPC="/tmp/firecache"
FIREC="/Users/albert/Library/Caches/Firefox/Profiles/tjgsuein.default"

if ! test -d $TMPC; then
	mkdir $TMPC
	chown albert $TMPC
fi

if test -d $FIREC; then
	rm -rf $FIREC
fi

ln -s $TMPC $FIREC

Jag sparade scriptet som ~/bin/firefox_cache.sh.

I GNU/Linux är det bara katalogen Cache, under profilkatalogen, som ska länkas till ramdisken. Ändra därför raden som börjar med FIREC= till:

FIREC="/home/albert/.mozilla/firefox/tjgsuein.default/Cache"

Obs. Glöm inte att byta ut användarnamnet albert mot ditt användarnamn och byt till namnet på din profil (ta inte bort Cache på slutet). Bägge ändringarna görs alltså på rad 4 (som börjar med FIREC=).

Ramdisk OS X

I OS X är det lite krångligt att ändra /tmp till en ramdisk, men det går. Använd bash-koden från solution 2 här. Lägg den i ett script, te.x. ramdisk.sh:

#!/bin/sh

make_ramdisk() {
  # klistra in koden från:
  # gistflow.com/posts/153-create-ram-disk-on-os-x
  # här.
}

# Skapa 1Gb ramdisk
make_ramdisk /private/tmp 1024

# Anropa scriptet som länkar firefox cachen till /tmp
/Users/albert/bin/firefox_cache.sh

Notera att /tmp i sig är en länk till /private/tmp på OS X. Men när scriptet ovan väl körts går det bra att använda /tmp som vanligt utan att tänka på detaljerna.

Scriptet måste köras som superuser (antingen med sudo eller av systemet självt). Det är bra om scriptet körs så tidigt som möjligt (innan /tmp innehåller något viktigt). I GNU/Linux sköts detta automatiskt via fstab, men här måste vi skapa ytterligare ett script, som får systemet att köra scriptet ramdisk.sh tidigt när den startar upp.

Kod härifrån:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.my.ramdisk</string>
    <key>ProgramArguments</key>
    <array>
            <string>/Users/albert/bin/ramdisk.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Spara filen som /Library/LaunchDaemons/com.my.ramdisk.plist. Ändra bara sökvägen till ramdisk.sh.

För att göra samma sak med Chrome, ändra bara sökvägen till cachekatalogen i scriptet firefox_cache.sh (något i stil med ~/Library/Caches/Google/Chrome under OS X och ~/.config/google-chrome/Default/nånting under GNU/Linux). Jag har dock inte testat detta med Chrome eller Chromium.

Kom ihåg att en sidoeffekt av att ha Cachen på ramdisk är att den försvinner varje gång datorn startas om, vilket kan ses både som en fördel och en nackdel.

Advertisements

Om albertveli

Grävande programmerare.
Det här inlägget postades i Linux/DIY. Bokmärk permalänken.

Kommentera

Fyll i dina uppgifter nedan eller klicka på en ikon för att logga in:

WordPress.com Logo

Du kommenterar med ditt WordPress.com-konto. Logga ut / Ändra )

Twitter-bild

Du kommenterar med ditt Twitter-konto. Logga ut / Ändra )

Facebook-foto

Du kommenterar med ditt Facebook-konto. Logga ut / Ändra )

Google+ photo

Du kommenterar med ditt Google+-konto. Logga ut / Ändra )

Ansluter till %s