No início do trabalho com Node.js e React, uma questão que confundia muitos desenvolvedores era a afirmação frequente de que o JavaScript é single-threaded. Contudo, profissionais observavam que…
Ao iniciar trabalhos com Node.js e React, um ponto que frequentemente causa confusão é a afirmação de que “JavaScript é single-threaded”, enquanto a linguagem consegue, de alguma forma, lidar com múltiplas tarefas simultaneamente. Posteriormente, o profissional também pode se deparar com termos como I/O heavy vs CPU heavy, deployment com Docker e React build size. A Demandei propõe desmistificar esses conceitos em termos simples.
- Se o desenvolvedor solicitar que o Node.js leia um arquivo do disco, a plataforma não fica ociosa aguardando.
- Em vez disso, ele repassa a tarefa ao sistema operacional e segue para outras demandas.
- Assim que o arquivo está pronto, o Node.js recebe um callback informando: “Aqui está o arquivo.”
É assim que o Node.js lida com múltiplas tarefas simultaneamente, mesmo que a linguagem em si seja single-threaded.
- Python → Popular para trabalhos intensivos em dados, como AI/ML. No entanto, seus servidores web geralmente utilizam múltiplos processos/threads para escalabilidade.
O conceito é simples:
- I/O Heavy → Aguardando entrada/saída, como buscar dados de um banco de dados, chamar uma API ou ler um arquivo.
👉 O Node.js é perfeito para tarefas I/O heavy. No entanto, se o trabalho do profissional for CPU heavy, o Node.js pode apresentar lentidão, pois o único thread fica bloqueado.
Como escolher um banco de dados? É importante considerar o caso de uso:
- SQL (Postgres, MySQL) → Dados estruturados, relações, transações.
👉 Regra geral:
- Se os dados de um projeto possuem relacionamentos → recomenda-se usar SQL.
Os índices são como o sumário de um livro. Em vez de ler cada página, o banco de dados pode saltar rapidamente para o resultado desejado.
Tipos mais utilizados:
É fundamental utilizar os índices com sabedoria, pois eles aceleram as leituras, mas podem tornar as escritas um pouco mais lentas.
Para desenvolvedores que estão começando com deploy, o Docker é a maneira mais fácil de iniciar.
Passos simplificados:
- Escrever um
Dockerfile
→ isso é como uma receita para a aplicação. - Construir uma imagem → como criar um pacote da aplicação.
👉 O grande benefício: a famosa frase “Na minha máquina funciona” não será mais um problema.
Quando se constrói uma aplicação React, ferramentas como Webpack agrupam todo o código em alguns arquivos JavaScript.
- Esses arquivos são enviados para o navegador.
- Quanto maior o arquivo → maior o tempo de carregamento → aplicação mais lenta.
É por isso que os desenvolvedores falam sobre:
- Tree-shaking → remoção de código não utilizado.
- Lazy loading → carregamento de partes pesadas posteriormente (como a abertura de um modal ou dashboard).
No index.html
de uma aplicação, pode-se ter visto tags de script como esta:
Para aplicações React, o defer geralmente é mais seguro, pois não bloqueia a página.
Algumas dicas:
- Dividir os elementos em componentes menores, como blocos de Lego.
- Pensar em reusabilidade, um Button deve funcionar em qualquer lugar com pequenas modificações.
- Elevar o estado (Lift state up), se dois componentes compartilham dados, é recomendado mantê-los em seu componente pai.
- Manter componentes puros, eles devem apenas renderizar a UI, sem lidar com muita lógica.
- Utilizar code splitting (
React.lazy
,Suspense
). - Remover pacotes não utilizados.
- Comprimir e otimizar imagens.
- Utilizar uma CDN para arquivos estáticos.
- Verificar o tamanho do bundle com ferramentas como Webpack Bundle Analyzer.
Para profissionais que estão iniciando com Node.js e React, o mais importante é a compreensão dos fundamentos.
- Node.js = ótimo para aplicações I/O heavy.
- É importante escolher o banco de dados certo com base nos dados do projeto.
- Índices = queries mais rápidas.
- Docker = deploy facilitado.
- React = construir componentes pequenos e reutilizáveis, e manter o tamanho do bundle sob controle.