JavaScript: dois mundos — uma linguagem
\n\nHouve um tempo em que JavaScript era apenas uma linguagem para animar banners e validar formulários. Hoje, é a ferramenta mais versátil do desenvolvedor web. Mas com essa versatilidade vem a complexidade da escolha: escrever a lógica do servidor com Node.js ou deixar o JS para o frontend, e usar Python ou Go no backend?
\n\nNeste artigo, não vamos rodeios. Vamos pegar cenários reais, escrever código e analisar honestamente onde o JavaScript brilha e onde é melhor buscar alternativas. Se você está decidindo qual stack usar ou apenas quer entender o que acontece "por baixo dos panos" das aplicações web modernas, está no lugar certo.
\n\nJavaScript no frontend: o rei do navegador
\n\nComo funciona
\nO desenvolvimento frontend com JavaScript envolve trabalhar com DOM, eventos, animações e APIs do navegador. Hoje, não é mais apenas "JS puro": o ecossistema React, Vue, Angular e Svelte transformou a criação de interfaces em uma verdadeira engenharia.
\n\nAqui está um exemplo simples que mostra como o JS dá vida a uma página:
\n\n// Obtém dados do servidor e os exibe na página\nasync function loadUsers() {\n try {\n const response = await fetch('https://api.example.com/users');\n const users = await response.json();\n \n const list = document.getElementById('user-list');\n users.forEach(user => {\n const item = document.createElement('li');\n item.textContent = `${user.name} — ${user.email}`;\n list.appendChild(item);\n });\n } catch (error) {\n console.error('Erro ao carregar:', error);\n }\n}\n\nloadUsers();\n\nTudo funciona no navegador do usuário. Você entrega o HTML e o script, e o resto fica por conta do cliente. Isso proporciona uma resposta instantânea da interface: alternar abas, animações, carregar dados sem recarregar a página.
\n\nPrós do desenvolvimento frontend com JavaScript
\n- \n
- Feedback instantâneo — o usuário vê as mudanças imediatamente, sem esperar resposta do servidor. \n
- Comunidade enorme — qualquer problema já foi resolvido, qualquer biblioteca já foi criada. \n
- Linguagem única — se você sabe JS, pode escrever tanto para o cliente quanto para o servidor (full-stack). \n
- Ampla variedade de ferramentas — desde React para SPA até Next.js para SSR. \n
Contras do desenvolvimento frontend com JavaScript
\n- \n
- Segurança no lado do cliente — qualquer código pode ser inspecionado nas ferramentas do desenvolvedor. Segredos e chaves não podem ser armazenados aqui. \n
- Problemas com SEO — a renderização pura com JS é mal indexada pelos mecanismos de busca (resolvido com SSR). \n
- Desempenho em dispositivos fracos — SPAs pesados podem travar em celulares antigos. \n
- Dependência do navegador — versões diferentes podem interpretar o código de maneiras distintas. \n
JavaScript no backend: Node.js e seu ecossistema
\n\nComo funciona
\nQuando se fala em "JavaScript no backend", refere-se ao Node.js — um ambiente de execução baseado no motor V8. O Node.js permite executar JS fora do navegador: processar requisições HTTP, trabalhar com bancos de dados, sistema de arquivos e sockets de rede.
\n\nAqui está um servidor típico com Express.js:
\n\nconst express = require('express');\nconst app = express();\nconst PORT = 3000;\n\n// Middleware para parsing de JSON\napp.use(express.json());\n\n// Rota para obter usuários\napp.get('/api/users', async (req, res) => {\n try {\n const users = await db.query('SELECT * FROM users');\n res.json(users);\n } catch (error) {\n res.status(500).json({ error: 'Erro do servidor' });\n }\n});\n\n// Rota para criar um novo usuário\napp.post('/api/users', async (req, res) => {\n const { name, email } = req.body;\n const newUser = await db.query(\n 'INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *',\n [name, email]\n );\n res.statu