Javascript Benchmark: replaceAll

Há algum tempo escrevi um post contendo um exemplo de método para fazer replace em toda String. No caso o método que escrevi usava while e realmente é muito menos eficiente do que as alternativas apresentadas nos comentários, a primeira usando Expressão Regular (sugerida pelo Almir Mendes) e a segunda utilizando split e join (sugerida pelo Lucas Ferreira).  Então resolvi (depois de muito tempo) fazer um benchmark utilizando os três métodos para poder chegar a uma conclusão sobre qual seria melhor.

Fiquei muito surpreso com os testes, não porque o método utilizando while foi de longe o pior entre os três, mas sim pelo fato do método que consiste em dividir a String em um vetor e depois junta-la novamente (split+join) ter sido mais rápido do que o próprio método de replace do javascript utilizando Expressão Regular (já que o split também utiliza ER).

Outro fato interessante é que tanto utilizando ER quanto split-join os métodos se mostraram bastante escaláveis, enquanto o com while piora consideravelmente conforme o número de ocorrência aumenta.

Lembrando que fiz os testes através desta página que criei utilizando como browser o Firefox 3.0.5. Caso alguém faça os testes e obtenha resultados diferente gostaria de receber feedbacks.

5 thoughts on “Javascript Benchmark: replaceAll

  1. Leonardo A. Souza

    Muito bom! Muito legal mesmo!

    Só tenta agora substituir um “.” (ponto) por qualquer coisa usando o método da ER pra ver no que dá…🙂

    Responder
  2. Filipe Giusti

    Tenta substituir “ipsum” por “ipsums” no primeiro método…

    O único método correto dentre os 3 é o do split/join (e ó que maravavilha é o mais rápido também).

    Responder
  3. Pingback: Javascript: replaceAll() | Rogério Lino

  4. Fagner

    O bônus de legibilidade e conveniência ultrapassa a incoveniência de ter um método mais demorado em milhões de iterações, isso por causa da limitação e controle de uso. split e join com certeza são mais rápidos, exceto quando você quer considerar o case das substituições, dessa forma você não tem outra alternativa a não ser implementar.

    Responder

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s