DEV Community

Cover image for Lentidão ao rodar o Vite dentro de container Docker em Mac Antigo
Jhonatan Henkel
Jhonatan Henkel

Posted on

Lentidão ao rodar o Vite dentro de container Docker em Mac Antigo

Olá rede, tudo bem com vocês?

Recentemente escrevi um post sobre como ganhar desempenho em sua maquina de desenvolvimento MacOS com Docker.

Recapitulando, meu setup é um pouco mais antigo, então essa é a principal causa do problema.

Meu setup: MacBook Pro 2017 (i5, 8Gb Ram, 120Gb SSD)
Tive a oportunidade de rodar esse mesmo projeto em um Macbook M2 Pro de um amigo e não tive nenhum desses problemas de desempenho, ou seja, o problema é o meu hardware mesmo.

Após muitas, muitas, muitas e muitas pesquisas, consegui chegar a uma solução. Mas primeiramente vamos tomar conhecimento do problema, para só então ir para a solução.

O Problema

Tenho uma aplicação de finanças demo aqui, onde rodo em máquina local com Docker, utilizo Laravel no back end e Vue.js gerenciado pelo Vite no front end. Para desenvolver nessa aplicação, temos o ritual básico:

  • docker-compose start
  • docker exec -it my_finances_planner_app bash
  • npm run dev

Após esses passos tenho meu container iniciado, e o rot reload funcionando. Porém, ao rodar essa última etapa o desempenho da aplicação e da minha maquina despencava. Vamos aos números.

Rodando o npm run dev (Hot reload ativo):

  • ~3 segundos para trazer um registro da API via Insomnia;
  • ~24 segundos para o primeiro carregamento da aplicação;
  • ~12 segundos para os demais recarregamentos (F5 ou Ctrl+R);
  • ~5 segundos para aplicar alterações via hot reload;
  • ~20% CPU ociosa.

Sem rodar o npm run dev (projeto com o front compilado):

  • ~700ms para trazer um registro da API via Insomnia;
  • ~10 segundos para o primeiro carregamento da aplicação;
  • ~5 segundos para os demais recarregamentos (F5 ou Ctrl+R);
  • ~2 segundos para aplicar alterações via hot reload;
  • ~80% CPU ociosa.

Bem lento né? fica praticamente inviável desenvolver assim, e mais inviável ainda ficar compilando o projeto a cada alteração, concorda?

O motivo

O código alterado se encontra fora do Docker, ou seja, cada alteração feita vai primeiramente refletir-se dentro do container, que por sua vez reflete na maquina virtual Linux que o Docker usa no MacOs, o Vite fica trabalhando dentro do container observando as alterações, assim que ele detectar a alteração, vai refletir no navegador.

Motivo lentidão

Como o Docker utiliza uma VM Linux, o desempenho dessa VM é bem menor que o da maquina real, e todas essas etapa demandam tempo e recurso.

Como o meu hardware é um pouco mais antigo, isso acaba demandando muito recurso.

A Solução

Como a máquina local é mais rápida que a VM Linux, e a maquina local suporta o Node (Necessário para rodar o build e o hot reload), cheguei a conclusão de encurtar esse processo descrito acima.

No caso eu instalei o Node localmente, rodo o hot reload (npm run dev) no terminal local. Dessa forma, o hot reload roda na máquina mais rápida (Mac, a maquina de desenvolvimento) sem precisar de toda a virtualização do Linux e consegue fazer o seu serviço bem mais rápido.

Solução Lentidão

Neste caso o hot reload observa o código local, e não o refletido dentro da VM Linux. Sendo assim, muito mais rápido.

O Resultado em números foi muito próximo aos apresentados acima sem rodar o npm run dev, só que a diferença é que agora tenho o mesmo resultado rodando o npm run dev.

Finalizando...

Alguns podem dizer que essa não é a forma certa, pois estou rodando o node fora do container. Pode até não ser, mas funciona, e melhor, com desempenho bem maior que anteriormente e para quem não tem como comprar um Mac de última geração, é uma ótima alternativa.

Por hoje é só pessoal, nos vemos em breve!

Top comments (0)