DEV Community

Thiago Gomes
Thiago Gomes

Posted on

Como otimizar execuções do Jest limitando uso de CPU

Introdução
Usando Jest como ferramenta de teste em aplicações JavaScript, nota-se que são recorrentes problemas relacionados à performance. Dependendo da quantidade de test suits, mesmo uma maquina com bom hardware não parece ser suficiente para se ver livre de lentidão e eventuais travamentos do sistema.

Este problema está diretamente relacionado com a forma que o Jest faz uso dos recursos do sistema, e pode ser facilmente otimizado limitando a quantidade de threads envolvidas no processo usando a flag --maxWorkers

Funcionamento do Jest em sua máquina
Por padrão, o Jest não possui otimizações relacionadas ao uso de CPU. Ao rodar os testes, o Jest recruta uma thread para a execução da CLI, e as demais threads são todas usadas para o processamento dos casos de teste.

A ausência de um uso inteligente de threads da CPU resulta em um subaproveitamento do hardware disponível, causando problemas de desempenho.

Para controlar o uso que o Jest faz dos recursos da sua CPU, basta passar a flag --maxWorkers= seguido do número de threads que você deseja utilizar no processamento dos casos de teste ou de um valor em porcentagem.

Otimizando uso de threads
Em todos os casos que eu testei o desempenho passando o parâmetro --maxWorkers=50% foi superior à execução padrão que busca sempre usar o máximo de threads possível.

O número ótimo de workers pode variar de acordo com sua máquina e testes que você está realizando. Então a melhor maneira para encontrar a melhor configuração é testar todas as possibilidades.

Primeiramente você precisa saber o quantidade de threads que seu computador têm, para saber este número baste checar no site da fabricante do seu processador, ou se estiver em um ambiente Linux, rodar o seguinte comando:

$ lscpu | egrep '^CPU\('
Enter fullscreen mode Exit fullscreen mode

No meu caso tenho 8 threads.

Agora basta testar em todos os casos possíveis, comparar os tempos e obter o número de threads ideal para o seu caso particular.

Este é o comparativo dos tempos que eu obtive testando um exemplo com 72 test suits e 361 casos de teste:

Time:        58.017 s // npm run test -- --maxWorkers=1 

Time:        37.701 s // npm run test -- --maxWorkers=2 

Time:        35.077 s // npm run test -- --maxWorkers=3

Time:        30.460 s // npm run test -- --maxWorkers=4

Time:        41.258 s // npm run test -- --maxWorkers=5

Time:        48.251 s // npm run test -- --maxWorkers=6

Time:       294.039 s // npm run test -- --maxWorkers=7
Enter fullscreen mode Exit fullscreen mode

Conclusão
A performance do Jest pode ser facilmente melhorada ajustando uma única configuração, com a flag --maxWorkers. No meu caso, a quantidade ideal de workers para o melhor funcionamento do Jest foi de 4 threads.

Oldest comments (1)

Collapse
 
isabella_pimentel_d1fbe94 profile image
Isabella Pimentel

Ótimo conteúdo explicado de maneira objetiva e acessível ! Parabéns 👏🏻👏🏻 Já estou seguindo !!!