quarta-feira, 9 de abril de 2008

Firefox e os Fractais

Números romanos são só um dos ritos de passagem que todo programador, mais cedo ou mais tarde, acaba fazendo. Certa vez eu notei que era uma vergonha nunca ter implementado o conjunto de Mandelbrot na vida. Resolvi isso rapidamente escrevendo uma versão em Actionscript, e acabei ficando impressionado com o resultado! Com um pouquinho de otimização, o arquivo swf resultante tinha menos de 512 bytes.


É claro que eu resolvi tomar como desafio fazer o mesmo em outras linguagens. Em javascript foi tranqüilo, em java eu tive que apelar: só consegui atingir a barreira de 512 bytes escrevendo o bytecode diretamente na unha (source). Em python foi tão tranqüilo que, com a ajuda dos amigos, eu consegui reduzir para menos de 256 bytes:

De todas elas, a mais lenta certamente é a versão em javascript. Mas com todos falando bem do novo interpretador javascript do Firefox 3 Beta 5, eu resolvi usar esse fractal como benchmark. Fiz uma pequena modificação para imprimir o tempo gasto com o traçado, e eis os resultados:

  1. Firefox 3: 4.0 s
  2. Safari 3.1: 4.0 s
  3. IE 6: 8.3 s
  4. Firefox 2: 14.4 s
  5. Opera: 21.3 s
Eu rodei todos os browsers na mesma máquina, um intel dual core com windows. O ganho foi como o esperado mesmo, o Firefox ficou mais ou menos 3x mais rápido. Mas em compensação ele não é tão mais rápido quanto dizem, só tem a mesma velocidade do Safari.

4 comentários:

  1. Você já experimentou reimplementar a versão em javascrit usando "canvas"? deve ser absurdamente mais rápido. (minha versão está aqui: http://www.girino.org/frac/js/jsdraw.html -- é bem lenta porque eu uso "threads" para evitar que o IE trave, mas otimizando apenas para o firefox e reduzindo a resolucao seu ganho de velocidade deve ser grande.)

    ResponderExcluir
  2. Ah sim, é que o constraint original era manter o código menor que 512 bytes. Depois eu faço com canvas pra ver como fica.

    ResponderExcluir
  3. No Safari 3.0 o tempo foi 5.4s.
    Versus 17s no Firefox 2 no mesmo sistema.

    Mac OSX - Intel Core 2 Duo

    ResponderExcluir
  4. Ubuntu 7.10,
    Epiphany 2.20.1,
    Time Elapsed: 17740 ms

    Firefox 2.0.13,
    Time Elapsed: 29964 ms

    Opera 9.27,
    Time Elapsed: 14659 ms
    (com a vantagem de não travar durante esse tempo).

    Firefox 3, beta 2,
    Time Elapsed: 19847 ms

    ResponderExcluir