SeaMonkey vs. Firefox ou Fuçe, antes de sair brincando de marketeiro ou Faça-você-mesmo: medindo o T-rex Motivação: ---------- Provar com números (ainda que de forma um tanto subjetiva, e ao menos para uma única pessoa) que a suíte Mozilla (SeaMonkey) é tão eficiente quanto o navegador standalone Firefox. Levando-se em consideração que o Firefox não é mais que um navegador e que o SeaMonkey é composto por vários módulos: navegador, leitor de e-mails, cliente IRC etc (verifique os resultados para mais detalhes sobre os módulos e sobre os tamanhos dos pacotes e a utilização de disco por cada um). Todos os testes foram feitos com sistemas livres em mente, como o Linux ou algum BSD. Anotações: ---------- Pela inexistência (atual) do arquivo http://jrgm.mcom.com/cgi-bin/window-open-2.0/openreport.pl, os resultados finais de abertura de janelas dos programas, localmente, foram comprometidos. Os números foram anotados à mão e duas etapas do processo não foram concluídas por isso (abrir e fechar as janelas simultaneamente e abrir todas para depois fechá-las em seguida de uma só vez; rotinas executadas pela chamada ao arquivo winopen.xul). Caso alguém ache o arquivo openreport.pl mencionado, por favor, entre em contato. Pela falta de uma forma eficiente de se medir a velocidade de abertura de um dado número de abas e da performance da interface pra desenhá-las, a forma mais comum hoje de navegação não pôde ser mensurada. Os tempos de inicialização dos dois programas foram tomados sem o módulo Time::HiRes da linguagem Perl, que é recomendada para uma precisão maior. Também, pelo fatos dos builds usados nos testes serem oficiais e finais, não foi possível usar 'user_pref("browser.dom.window.dump.enabled", 1);' como forma dos programas enviarem para a saída padrão os tempos obtidos (é interessante levar isso em consideração, pois dessa forma não teria sido necessário renderizar os tempos e exibí-los na tela). Todos os testes (inclusive dos tempos de inicialização) foram feitos usando-se perfis vazios. Não havia nenhum .mozilla antes dos scripts serem executados. Diferenças entre os primeiros números podem ser percebidas por isso, mas indicam que a demora foi devida à criação dos "profiles", no máximo. Em cada etapa dos testes (antes do script ./benchscript e antes do ./browsertest), os perfis foram removidos para serem recriados pelos próprios programas. Uma vez que eles dividem o mesmo .mozilla, a configuração de um poderia interferir na do outro. No endereço http://axolotl.mozilla.org/page-loader/loader.pl pode ser feito um teste de renderização online das páginas. No entanto, isso depende bastante da conexão/rede que estiver usando. Devido alguns problemas de proxy, não foi possível obter tempos de renderização no Athlon referido. Todos os 40 sites do teste foram arquivados inteiramente no final de 2000 e o cache local dos navegadores estava ligado. Nenhum valor do formulário do script foi alterado. Aumente o valor de timeout do teste somente em último caso, se sua conexão, ou máquina, for lenta. Não é fácil de se interpretar os dados oferecidos pelo memstat, que mede o consumo de memória virtual, utilização dela por processos e bibliotecas compartilhadas. Os números que mostram o consumo de memória virtual dados pelo memstat não parecem certos, ou eu não pude entendê-los. Pelos builds usados serem finais, não existe nenhum tipo de otimização nos binários nem funcionamento especial algum compilado. Parâmetros de compilação para depuração e testes são desabilitados em builds finais. Foi descartada a compilação própria dos programas, pois isso poderia dificultar a reprodução dos testes por outras pessoas. Os testes com a suíte Mozilla e com o Firefox foram feitos de uma forma que qualquer um pudesse reproduzir os procedimentos com o mínimo de transparência. Os testes realizados pelos desenvolvedores dos dois programas são diferentes e na grande maioria dos casos, feitos de forma automatizada nos parques de compilação. Isso é uma medição geral feita por um usuário, para usuários. Os testes não levaram em consideração o uso de outra língua na interface dos programas. Todos os dados foram obtidos usando-se o idioma original do programas (inglês americano, en_US) e ainda as configurações padrões dos mesmos. Seria curioso saber se existe alguma diferença de performance no simples uso do programa em outra língua (como o português brasileiro, pt_BR). Esse foi o primeiro "benchmark" que eu fiz (se é que se pode chamar isso de um benchmark de verdade), e as ferramentas necessárias para testar programas da família Mozilla não são tão difundidas e fácil de serem obtidas e usar. Além de tudo, as páginas web consultadas pareciam ser extremamente antigas e nenhuma informação atualizada ou nova foi encontrada sobre isso. Qualquer ajuda futura pra melhorar os resultados é muito bem-vinda. Resultados: ----------- Os arquivos k6_results.txt e athlon_results.txt são resumos dos dados coletados em duas máquinas extremamente diferentes e podem dar uma idéia geral da coisa. Para números mais específicos, vide os arquivos .log e os dumps .html com números sobre a renderização de documentos dos dois programas, obtidos somente com uma das máquinas. As diferenças entre os dois programas não é tão absurda quanto se parecia antes dos testes, mas indica a vantagem de se usar o Firefox, caso se procure somente por um navegador. Todavia, a performance de outros programas "standalone" para navegação é perceptivelmente melhor em relação ao Firefox, além de serem melhor integrados com o ambiente para o qual foram desenvolvidos e em geral possuirem um número maior de recursos além da simples navegação na Internet. Esse é o caso do Konqueror; navegador do KDE, que faz uso intensivo de recursos de rede, serve como gerenciador local/remoto de arquivos e usa um motor de renderização aparentemente mais rápido - o KHTML, também desenvolvido pela Apple para o seu navegador Safari. O mesmo se pode dizer do Epiphany; navegador padrão do GNOME, que usa o motor de renderização do Mozilla (o Gecko|NGLayout) de uma forma minimalista e possui uma extensiva capacidade de configuração através do ambiente, além de ser facilmente personalizável e bastante voltado para usuários leigos, graças às HIG do projeto (Human Interfaces Guidelines). Procedimento: ------------- Antes do início dos testes, é necessário instalar os pacotes necessários do seu sistema que contenham os seguintes programas: top, ps, memstat, free, lwm, xterm e perl. Os arquivos que medirão o teste são Bash Scripts, mas sem motivo; pode-se editá-los e alterar o header do script para algum outro shell, desde que se ajuste os .sh de acordo. Certifique-se de ter no mesmo diretórios dos arquivos do teste, dois diretórios com os builds dos programas já descompactados. Desta forma: ~/benchmoz: ls -l total 68K -rwxr-xr-x 1 caio caio 924 2005-01-03 10:44 benchscript.sh -rwxr-xr-x 1 caio caio 929 2005-01-03 10:44 browsertest.sh -rw-r--r-- 1 caio caio 185 2004-12-29 21:13 child-window.html drwxr-xr-x 12 caio caio 4,0K 2005-01-03 16:27 firefox <- Firefox 1.0 en_US -rw-r--r-- 1 caio caio 1,8K 2005-01-01 14:39 gettime.pl -rwxr-xr-x 1 caio caio 745 2005-01-01 15:16 infobefore.sh drwxr-xr-x 12 caio caio 4,0K 2004-12-17 15:38 mozilla <- Mozilla 1.7.5 en_US -rw-r--r-- 1 caio caio 6,4K 2005-01-05 17:23 README.txt -rw-r--r-- 1 caio caio 527 2005-01-01 16:10 startup-test.html -rwxr-xr-x 1 caio caio 1,2K 2005-01-01 14:39 startup-unix.pl -rw-r--r-- 1 caio caio 8,2K 2005-01-01 16:01 winopen.js -rw-r--r-- 1 caio caio 2,4K 2002-01-31 20:12 winopen.xu Após iniciar a máquina com o mínimo possível de processos (recomenda-se somente habilitar a rede na inicialização), autentique com o usuário que possui os arquivos do teste e os builds prontos e de dentro do diretório dos scripts, execute ./infobefore.sh, que irá capturar algumas informações básicas do seu computador/sistema; para tal, é necessário ter a partição /proc montada. Utilize o comando "echo lwm > .xinitrc", sem aspas, para indicar ao servidor gráfico que o gerenciador de janelas a ser usado é o Lightweight Window Manager; o menor e mais leve gerenciador de janelas que foi possível encontrar, oferecendo no máximo 3 operações com janelas, mas o suficiente para os testes. Foi pensado em se utilizar o ratpoison como gerenciador, só que seus recursos vão além da necessidade atual e, mesmo ele, se pareceu "grande" demais. Inicie o servidor gráfico e com o segundo ou terceiro botão do mouse, clique no fundo da tela para iniciar um terminal virtual. Entre no diretório dos scripts e dos builds e execute um dos dois programas. Lembre-se de configurar a variável adequada nos scripts .sh com o nome do programa que será usado na vez e também de usar a instrução "&", sem aspas, logo após o nome do programa, deixando o terminal livre para a execução do script ./benchscript. Recomenda-se esperar o fim do carregamento da página inicial do programa até que se execute o script. Após o término do script pode-se fechar o programa escolhido. Com os recursos do sistema normais novamente e um perfil zerado (por precaução), refaça o procedimento mas desta vez use o script ./browsertest, que irá iniciar os seguintes testes: - Abrir e fechar toda a aplicação por 5 vezes seguidas (anote os tempos exibidos na janela de renderização dos dois programas). - Renderizar online 40 sites previamente arquivados e emitir um relatório após o teste. Nota: por algum motivo o "dump" dos resultados é uma página em branco, mas basta identificar a abertura da página "dump.pl.html" e salvar todo seu conteúdo. Os resultados estão no fonte dela. - Abrir e fechar seguidamente 20 janelas do programa a partir do site Mozilla.org. - Abrir e fechar seguidamente 10 janelas do programa a partir da sua própria máquina. Infelizmente os resultados não puderam ser gerados automaticamente (devido ao problema comentado sobre o openreport.pl), então é necessário que o usuário preste atenção numa janela extra da aplicação que vai exibindo os tempos conforme o teste é executado. Nota: todos os arquivos com os resultados obtidos pelos scripts ficam por padrão no diretório /tmp/ do seu sistema, salvo os que emitem na tela os números correspondentes ou como no caso do winopen.xul (por falta do openreport.pl), exiba os resultados numa janela à parte do programa. Referências: ------------ http://www.mozilla.org/performance/: dicas, informações e procedimentos de testes e dados sobre performance dos programas da família Mozilla. Um grupo de páginas bastante útil como ponto de partida, mas em geral bem desatualizado. http://lxr.mozilla.org/mozilla/source/tools/performance/: diversos scripts e arquivos para medição de performance dos programas mencionados. No diretório acima deste, existem uma série de outros, mais específicos e com funções variadas, mas ainda assim interessantes. http://www.mozilla.org/performance/measureStartup.html: como medir e analisar o tempo de inicialização do Mozilla. Oferece várias formas de se fazer isso. Caio Begotti, caio1982 (caio.ouie.org) [para o] Projeto Mozilla/Brasil http://www.mozilla.org.br