FireFox Vacuum (optimiert alle FireFox V3.x SQLite-Datenbanken - History, Cookies ...)

  • Das Programm optimiert die SQLite-Datenbanken, aller Profile, des angemeldeten Benutzers.

    Warum:
    Diese Datenbanken fragmentieren sich durch Lösch- und Update Vorgänge bzw. werden dadurch mit der Zeit auch immer größer.
    (in den Datenbanken stehen z.B. die History, Cookies ...)

    Problem dadurch:
    FireFox startet immer langsamer bzw. wird stellenweise auch immer träger.

    Lösung:
    Einfach auf jede Datenbank den SQLite-Befehl VACUUM anwenden. Damit wird dieses Datenbank wieder optimiert.
    ( http://www.sqlite.org/lang_vacuum.html )

    Das Ganze basiert auf folgendem Artikel:
    http://mozillalinks.org/wp/2009/07/vac…er-performance/
    dort sind auch ein paar Messungen zu Speicherplatzverbrauch der Datenbanken und FF-Startzeiten zu sehen.

    Das Programm:

    Spoiler anzeigen
    [autoit]

    ; ==============================================================================
    ; Name ..........: FireFox Vacuum
    ; Description ...: Optimiert die FireFox sqlite Datenbanken aller Profile des angemeldeten Benutzers
    ; AutoIt Version : V3.3.0.0
    ; Author(s) .....: Thorsten Willert
    ; Date ..........: Sun Aug 30 19:08:13 CEST 2009
    ; ==============================================================================
    #include <SQLite.au3>
    #include <SQLite.dll.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $aDB = _GetFilesFolder_Rekursiv( @AppDataDir & "\Mozilla\Firefox\Profiles", 'sqlite',0)
    If IsArray($aDB) Then
    _SQLite_Startup()
    For $i = 1 To $aDB[0]
    _SQLite_Open($aDB[$i])
    If Not @error Then
    ConsoleWrite("Optimizing: " & $aDB[$i] & @CRLF)
    If $SQLITE_OK <> _SQLite_Exec(-1,"VACUUM") Then _
    ConsoleWrite( _SQLite_ErrCode() & @CR & "Error Message: " & _SQLite_ErrMsg() & @CRLF)
    _SQLite_Close()
    EndIf
    Next
    _SQLite_Shutdown()
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;==================================================================================================
    ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]])
    ; Description: Rekursive Auflistung von Dateien und/oder Ordnern
    ; Parameter(s): $sPath der Basispfad für die Auflistung ('.' -aktueller Pfad, '..' -Parentpfad)
    ; $sExt Erweiterung für Dateiauswahl '*' oder -1 für alle (Standard)
    ; $iDir -1 Dateien+Ordner(Standard), 0 nur Dateien, 1 nur Ordner
    ; optional: $iRetType 0 gibt Array, 1 gibt String zurück
    ; optional: $sDelim legt Trennzeichen für Stringrückgabe fest
    ; 0 -@CRLF (Standard) 1 -@CR 2 -@LF 3 -';' 4 -'|'
    ; Return Value(s): Array (Standard) od. String mit den gefundenen Pfaden der Dateien und/oder Ordner
    ; Array[0] enthält die Anzahl der gefundenen Dateien/Ordner
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;==================================================================================================
    Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
    Global $oFSO = ObjCreate('Scripting.FileSystemObject')
    Global $strFiles = ''
    Switch $sDelim
    Case '1'
    $sDelim = @CR
    Case '2'
    $sDelim = @LF
    Case '3'
    $sDelim = ';'
    Case '4'
    $sDelim = '|'
    Case Else
    $sDelim = @CRLF
    EndSwitch
    If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
    If $sExt = -1 Then $sExt = '*'
    If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
    _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
    If $iRetType = 0 Then
    Local $aOut
    $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
    If $aOut[1] = '' Then
    ReDim $aOut[1]
    $aOut[0] = 0
    EndIf
    Return $aOut
    Else
    Return StringTrimRight($strFiles, StringLen($sDelim))
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
    If Not IsDeclared("strFiles") Then Global $strFiles = ''
    If ($Dir = -1) Or ($Dir = 0) Then
    For $file In $Folder.Files
    If $Ext <> '*' Then
    If StringRight($file.Name, StringLen($Ext)) = $Ext Then _
    $strFiles &= $file.Path & $Delim
    Else
    $strFiles &= $file.Path & $Delim
    EndIf
    Next
    EndIf
    For $Subfolder In $Folder.SubFolders
    If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
    _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
    Next
    EndFunc

    [/autoit]


    Fehlermeldungen durch "gelockte" Datenbanken entstehen, wenn FireFox bei Ausführung dieses Programmes offen ist.

    Am besten das Ganze gelegentlich per Taskplaner ausführen (deswegen auch kein GUI, oder MsgBoxen)

    Vielen Dank an BugFix für die Funktion _GetFilesFolder_Rekursiv!!!

    4 Mal editiert, zuletzt von Stilgar (5. September 2009 um 09:43)

  • Ein "Update" - das nicht Rede wert ist: zusätzlich einen Tooltip dazugebastelt.

    [EDIT]
    Wer nach dem kompilieren der au3 eine komische Meldung beim Starten der exe bekommt:
    "Unable to open the Script file"
    sollte, bevor er den Kompiler anwirft, evtl. AntiViren oder sonstige Schutzprogramme ausmachen. Die scheinen den vermeindlichen Virus gleich mal zu reparieren und dadurch ist das Ergebnis vom AutoIt-Kompiler Müll .

    Genaueres habe ich nach langem suchen im englischen Forum nicht entdeckt, das Problem ist aber kein Einzelfall:
    Unable to open the script file

    Eine a3x hingegen funktioniert immer.

    Einmal editiert, zuletzt von Stilgar (5. September 2009 um 10:18)