DEV Community

Teteo
Teteo

Posted on

Nada é de graça! (Promises x Callbacks)

Início

Há algum tempo, me pego pensando na frase que dá título a este artigo e resolvi testar um exemplo muito presente no meu cotidiano: Promises.

Promises

O ES6 (ECMAScript 2015) trouxe muitas evoluções para a linguagem, e uma delas prometia (sem trocadilhos) fornecer uma maneira mais legível de lidar com operações assíncronas no meu amado JS, em comparação com as "confusas" e "esquisitas" callbacks: a Promise

O custo

Com as promises, a complexidade de lidar com operações assíncronas foi abstraída para essas entidades, facilitando muito a manutenção do código que criamos no nosso cotidiano. Mas será que a utilização dessas novas entidades traz um custo na performance dos nossos programas? Se sim, qual preço estamos pagando por essa abstração que nos ajuda? Qual o custo das promises?

O teste

Com esses questionamentos, resolvi fazer um pequeno teste sintético (nada científico e pouco acurado) para medir o custo no quesito tempo de se usar promises. O teste consiste em fazer um loop executar uma função especial que tem a tarefa de declarar uma constante e armazená-la em uma lista declarada fora do escopo da função. A função especial foi feita em duas versões: uma utilizando Callbacks e outra utilizando Promises. Ao final, é logado no console o resultado com o tempo de execução do cenário.
Código com promise:
promise code
Código com callbacks:
callback code

O código completo está disponível no link para o meu repositório

Resultado

Como mostram as imagens, utilizar promises no lugar de callbacks gera um custo na performance no quesito tempo de forma constante.

Teste feito com callback:
Teste com callback
Teste feito com Promises:

Teste com Promises

Execução dos testes:

Execução dos testes

Conclusão

É de extrema importância destacar que meu objetivo com esse teste bobo não é fazer alguém parar de utilizar promises e voltar a utilizar callbacks para lidar com operações assíncronas. O objetivo deste post é mostrar que as abstrações que nós utilizamos no nosso cotidiano têm um custo e que é ideal estarmos cientes desse custo para que possamos tomar melhores decisões no desenvolvimento das nossas aplicações.

Top comments (0)