quarta-feira, 26 de agosto de 2009

Firefox mais rápido

Com o Firefox 3, a Mozilla substituiu o antigo o formato de armazenamento de dados Mork pela base de dados (SGBD) SQLite, implementado pelo componente MozStorage. Foi um avanço significativo para que a responsividade da aplicação aumentasse e o consumo de memória reduzisse, dado o desempenho do SGDB em contrapartida à antiga implementação.

Contudo, com o tempo, o arquivo da base de dados vai inflando e, ao mesmo tempo, deixando espaços vazios. É um processo natural de um SGDB, denominado data overhead (sobrecarga de dados), que se dá pelo processo evolutivo do próprio à medida que a aplicação que o controla remove objetos (registros, tabelas, índices) não mais necessários. Apesar de otimizar o tempo de novas inserções, cria-se uma fragmentação prejudicial no acesso do disco ao conteúdo da base - mesma lógica de fragmentação em sistemas de arquivos.

Tá bom, você escreveu um texto enorme só pra dizer que o base de dados usada pelas aplicações da plataforma Mozilla versão 1.8 em diante se fragmenta. Cadê a otimização prometida no título?

Vá com calma, gafanhoto. A otimização nada mais é do que a "desfragmentação" das bases de dados. Bases? Sim, bases. Uma instalação comum tem pelo menos 10 bases de dados SQLite distintas, cada um com sua finalidade: armazenar cookies, preferências de conteúdo, favoritos/histórico, busca, permissões, etc. No entanto, as principais responsáveis pela estabilidade (ou falta dela) da aplicação são apenas duas: places.sqlite (onde se armazena os favoritos e histórico) e urlclassifier3.sqlite (dados do filtro anti-phishing). Tá, e como eu "desfragmento" os bagulhos?

Bem, como toda base de dados, via linguagem estruturada de consultas, mais conhecida como SQL. No caso do SQLite, a sintaxe é simples e objetiva: VACUUM. Tá, mas como eu faço isso?

Oras, com um gerenciador de SGBD's SQLite. Pode ser a própria ferramenta de linha de comando disponibilizada pelos desenvolvedores do mesmo, e é ela que vamos utilizar. Portanto: http://www.sqlite.org/download.html (baixe o arquivo denominado command-line program).

Windows

fxopt.bat
@echo off

setlocal
EnableExtensions
setlocal
EnableDelayedExpansion

for /d %%d in ("%APPDATA%\Mozilla\Firefox\Profiles" "%LOCALAPPDATA%\Mozilla\Firefox\Profiles" "%USERPROFILE%\Local Settings\Application Data\Mozilla\Firefox\Profiles") do (
if exist %%~d (
for /f %%f in ('dir /s /b %%~d\*.sqlite') do (
echo VACUUM
; | sqlite3 %%f
)
)
)

  • Baixado o arquivo especificado, descompacte-o em %WINDIR% (variável ambiente para o diretório de instalação do Windows) para que o mesmo se torne uma aplicação global;
  • Salve o script acima como fxopt.bat no diretório de sua preferência;
  • Feche o Firefox e espere que seu processo termine;
  • Abra uma janela do terminal de comandos (cmd) e execute o script a partir de onde foi salvo.

Pronto, todas as bases de dados estarão otimizadas.

Linux

fxopt.sh
#! /bin/bash

find
~/.mozilla/firefox -type f -name '*.sqlite' -exec sqlite3 {} VACUUM \;

  • Se sua distribuição já acompanha o executável sqlite3, nem precisa baixá-lo. Do contrário, da mesma forma que no Windows, após baixá-lo, descompacte-o em /usr/bin para que o mesmo se torne uma aplicação global - ou use gerenciadores como o apt-get para instalá-lo;
  • Salve o script acima como fxopt.sh no diretório de sua preferência e dê um chmod +x no mesmo;
  • Feche o Firefox e espere que seu processo termine;
  • Abra uma janela do terminal e execute o script a partir de onde foi salvo.

Pronto, todas as bases de dados estarão otimizadas.

Mac OS X

fxopt.sh
#! /bin/bash

if [ -d ~/Library/Mozilla/Firefox/Profiles ]; then
find
~/Library/Mozilla/Firefox/Profiles -type f -name '*.sqlite' -exec sqlite3 {} VACUUM \;
elif [ -d ~/Library/Application\ Support/Firefox/Profiles ]; then
find
~/Library/Application\ Support/Firefox/Profiles -type f -name '*.sqlite' -exec sqlite3 {} VACUUM \;
fi

  • Salve o script acima como fxopt.sh no diretório de sua preferência e dê um chmod +x no mesmo;
  • Feche o Firefox e espere que seu processo termine;
  • Abra uma janela do terminal e execute o script a partir de onde foi salvo.

Pronto, todas as bases de dados estarão otimizadas.


Outra forma mais Simples é:

  • Abra o Console de erros, no menu Ferramentas.
  • Cole o seguinte código no campo Código e execute:

Components.classes["@mozilla.org/browser/nav-history-service;1"].getService(Components.interfaces.nsPIPlacesDatabase).DBConnection.executeSimpleSQL("VACUUM");


O navegador congelará por algum tempo, tenha paciência e aguarde. Você notará uma diferença incrível, principalmente no tempo de resposta da awesome bar.



Considerações finais


Com a desfragmentação das bases, além de tornar mais responsivo (o acesso às bases fica mais rápido), o Firefox passará a usar menos memória (o tamanho das bases que são carregadas com a aplicação diminui).

Dependendo do uso, isso pode se reverter em pouco tempo. Portanto, analise seu grau de uso e determine um tempo de repetição que lhe satisfaça. Lembre-se ainda que você pode usar seu sistema para automatizar esta tarefa, seja criando um atalho/lançador para executá-la quando achar conveniente ou criando uma tarefa agendada para executá-la de tempos em tempos, preferencialmente no ato de iniciar ou desativar o sistema (lembre-se que o Firefox precisa estar fechado!). Aí é com você!

Fonte: GuiadoPC

Nenhum comentário: