DEV Community

Wanderson Alves Rodrigues
Wanderson Alves Rodrigues

Posted on • Edited on

Desempenho for – forin – forof JavaScript

Nesse post vou mostrar através de um exemplo qual laço tem o melhor tempo de execução, só lembrando que o uso de cada um depende da ocasião e a escolha de quando usar nem sempre é baseado no tempo de execução.

  1. Para o exemplo:
  • Node v12.x
  • Visual Studio Code

Vamos a codificação, no terminal execute mkdir exemplolacos e depois cd exemplolacos e por ultimo npm init -y .

No Visual Studio Code crie um arquivo chamado servico.js, para o exemplo vamos consumir uma API o https://swapi.co/ que retorna informações de Star Wars. Para o consumo da API vou usar axios https://www.npmjs.com/package/axios

Execute o comando npm i axios para adiciona ao package.json nas dependências.

O código do servico.js é mostrado abaixo:

const axios = require('axios');

const urlBase = 'https://swapi.co/';

async function obterPessoas(nome) {
    const url = `${urlBase}/api/people/?search=${nome}&format=json`;
    const resposta = await axios.get(url);
    return resposta.data;
}

module.exports = {
    obterPessoas
}
Enter fullscreen mode Exit fullscreen mode

No código importamos o axios através do require que usamos para realizar um get na API, é uma operação bem simples.
Tive que criar a função assíncrona, pois o retorno do get é de forma assíncrona, feito isso exportamos a função module.exports para ser usado em outros arquivos.
Agora vamos criar um novo arquivo chamado lacos.js no mesmo nível do servico.js.

O código do arquivo lacos.js encontra-se abaixo:

const servico = require('./servico');

async function main() {
    try {
        const resultados = await servico.obterPessoas('a');

        const names = [];
        /** 1 - For*/
        console.time('for');
        for (let i = 0; i <= resultados.results.length - 1; i++) {
            const pessoa = resultados.results[i];
            names.push(pessoa.name);
        }
        console.timeEnd('for');
        /** 2 - Forin*/
        console.time('forin');
        for (let i in resultados.results) {
            const pessoa = resultados.results[i];
            names.push(pessoa.name);
        }
        console.timeEnd('forin');
        /** 3 - Forof*/
        console.time('forof');
        for (pessoa of resultados.results) {
            names.push(pessoa.name);
        }
        console.timeEnd('forof');

        //imprimir resutados
        console.log('nomes', names);
    } catch (error) {
        console.error('houve erro', error);
    }
}

main();
Enter fullscreen mode Exit fullscreen mode

No código fiz a divisão para cada for, o resultado dos tempos de execução segue abaixo:

$ node lacos.js 
for: 0.580ms
forin: 0.068ms
forof: 0.423ms
Enter fullscreen mode Exit fullscreen mode

Como podemos observar pelo tempos o que teve melhor desempenho foi o forin, claro que só essa informação não define qual devemos usar, o uso vai depender de cada caso, a tomada de decisão será definida pela necessidade na hora de desenvolver e da complexidade da lista que estamos manipulando.

O código completo no link: https://github.com/wandealves/exemplolacos

Top comments (0)