Em O dia em que o desempenho deixou de ser importante, descobri que o desempenho do JavaScript melhorou cem vezes entre 1996 e 2006. Se a Web 2.0 foi construída sobre uma espinha dorsal de JavaScript, isso só é possível, em grande parte, por causa desses cruciais Melhorias de desempenho da Lei de Moore.
Mas será que atingimos um limite de desempenho? É possível que os navegadores executem o JavaScript de forma significativamente mais rápida do que fazem hoje? Sempre achei que a otimização just-in-time (ou mesmo a compilação) do JavaScript era uma fronteira inexplorada na tecnologia de navegadores. E agora o cenário mudou:
- Equipe do WebKit da Apple acaba de anunciar um novo e excelente benchmark de JavaScript, o SunSpider.
- O mercado de navegadores é mais competitivo do que nunca nos últimos anos, com Opera 9.5, Firefox 3, Safari 3 e IE 8 disputando a cobiçada posição de navegador padrão.
Talvez as equipes de navegadores comecem a considerar o desempenho do JavaScript uma vantagem competitiva. O última vez procurei benchmarks comuns de JavaScript, fiquei profundamente desapontado. É por isso que estou particularmente animado com o o benchmark SunSpider: é notavelmente bem planejado, fácil de executar e abrangente.
É baseado em código real que faz coisas interessantes; tanto coisas que os aplicativos Web de hoje estão fazendo quanto códigos mais avançados do tipo que podemos esperar à medida que os aplicativos Web se tornam mais avançados. Pouquíssimos testes poderiam ser classificados como microbenchmarks.
É equilibrado entre os diferentes aspectos da linguagem JavaScript — e não dominados por apenas um pequeno punhado de aspectos diferentes. Na verdade, coletamos casos de teste de toda a Web, inclusive de outros benchmarks. Mas, ao mesmo tempo, evitamos os testes DOM e nos restringimos ao núcleo da própria linguagem JavaScript.
É super fácil de executar no navegador ou a partir da linha de comando, para que o senhor possa testar o desempenho puro do mecanismo e os resultados que realmente obtém no navegador.
Incluímos análise estatística para que o senhor possa ver a estabilidade dos resultados que está obtendo.
Maciej Stachowiak, membro da equipe do WebKit da Apple, explicou gentilmente o que cada subseção dos benchmarks faz nos comentários:
3d | Cálculos puros em JavaScript do tipo que o senhor pode usar para fazer renderização em 3D, mas sem a renderização. Isso acaba afetando principalmente a matemática de ponto flutuante e o acesso a matrizes. |
acesso | Matriz, propriedade de objeto e acesso a variáveis. |
bitops | Operações bit a bit, que podem ser úteis para várias coisas, inclusive jogos, cálculos matemáticos e vários tipos de codificação/decodificação. É também o único tipo de matemática em JavaScript que é feito como inteiro, não como ponto flutuante. |
fluxo de controle | Construções de fluxo de controle (looping, recursão, condicionais). No momento, abrange principalmente a recursão, já que as outras são muito bem cobertas por outros testes. |
criptografia | Código de criptografia real, que abrange principalmente operações bit a bit e operações com strings. |
data | Desempenho dos objetos “date” do JavaScript. |
matemática | Vários cálculos de tipo matemático. |
regexp | Expressões regulares. Bastante autoexplicativo. |
string | Processamento de strings, incluindo código para gerar uma “tagcloud” gigante, extração de código JS compactado etc. |
SunSpider é o melhor benchmark de JavaScript que já vi, algo de que precisamos desesperadamente em uma era em que o O JavaScript é a língua franca da Web. Na verdade, fiquei tão empolgado que fiz alguns benchmarks rápidos para comparar os quatro principais participantes do mercado de navegadores:
- Windows Vista 32-bit
- 4 GB DE RAM
- CPU Core 2 Duo dual-core de 3,0 GHz
- todas as extensões de navegador desativadas (instalação limpa)
O que me surpreendeu aqui é que o Firefox é substancialmente mais lento que o IE, uma vez que o senhor considera que o resultado anômalo da string. Tive que usar uma versão beta do Opera para obter resultados diferentes de inválidos (NaN) para esse benchmark, o que coincidentemente resume minha opinião sobre o Opera. Ótimo quando funciona! Eu esperava que o Opera se saísse bem; ele estava vencendo com folga os benchmarks de JavaScript em 2005. O Safari, o novo garoto do pedaço, mostra-se extremamente bem, especialmente considerando que está sendo executado fora do ambiente nativo do OS X. Parabéns à Apple. Bem, com exceção do aquela coisa toda da fonte.
Se o senhor estiver curioso para saber como cada navegador se saiu em cada área de benchmark, também analisei isso:
Se o senhor precisar de mais detalhes, incluindo variações, pode baixar meu conjunto completo de resultados do SunSpider 0.9 como um arquivo de texto.
Se eu aprendi alguma coisa com o setor de informática, é que a concorrência beneficia a todos. Esperamos que o senhor um grande confronto de desempenho do navegador JavaScript estimula as equipes de navegadores a melhorar o desempenho nessa área cada vez mais crucial.