<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Thiago Gomes</title>
    <description>The latest articles on DEV Community by Thiago Gomes (@thgomes).</description>
    <link>https://dev.to/thgomes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F780648%2Fb4723de0-9af3-46b2-a1c4-4f08ff6797e0.jpeg</url>
      <title>DEV Community: Thiago Gomes</title>
      <link>https://dev.to/thgomes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thgomes"/>
    <language>en</language>
    <item>
      <title>Como otimizar execuções do Jest limitando uso de CPU</title>
      <dc:creator>Thiago Gomes</dc:creator>
      <pubDate>Sun, 26 Dec 2021 23:34:58 +0000</pubDate>
      <link>https://dev.to/thgomes/como-otimizar-execucoes-do-jest-limitando-uso-de-cpu-12a1</link>
      <guid>https://dev.to/thgomes/como-otimizar-execucoes-do-jest-limitando-uso-de-cpu-12a1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introdução&lt;/strong&gt;&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;--maxWorkers&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Funcionamento do Jest em sua máquina&lt;/strong&gt;&lt;br&gt;
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.&lt;/p&gt;

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

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

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

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ lscpu | egrep '^CPU\('
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No meu caso tenho 8 threads.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Este é o comparativo dos tempos que eu obtive testando um exemplo com 72 test suits e 361 casos de teste:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

</description>
      <category>javascript</category>
      <category>jest</category>
      <category>test</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
