JavaScript em 2025: o que há de novo?
2025 tornou-se um ano marcante para o ecossistema JavaScript. A linguagem, que começou como uma simples ferramenta de script para navegadores, agora domina com confiança o desenvolvimento web, o lado do servidor (Node.js) e até mesmo aplicativos desktop. Este ano, as tão aguardadas especificações ECMAScript 2025 foram lançadas, e o ecossistema Node.js recebeu uma série de melhorias criticamente importantes. Neste artigo, vamos analisar as principais novidades que todo desenvolvedor precisa conhecer.
1. Temporal API: uma nova era de trabalho com datas e horas
Uma das maiores dores de cabeça em JavaScript é trabalhar com datas através do obsoleto objeto Date. Em 2025, esse problema foi finalmente resolvido. A Temporal API é uma forma moderna, imutável e type-safe de trabalhar com datas, horas, fusos horários e calendários.
Temporal fornece vários tipos de objetos:
Temporal.Instant— um momento exato no tempo (precisão de nanossegundos).Temporal.PlainDate— uma data sem hora (por exemplo, 2025-03-15).Temporal.PlainTime— uma hora sem data.Temporal.ZonedDateTime— data e hora com fuso horário.
Exemplo: trabalhando com fusos horários em Node.js
import { Temporal } from '@js-temporal/polyfill';
// Hora atual em UTCconst now = Temporal.Now.instant();console.log('Agora (UTC):', now.toString());
// Conversão para o fuso horário de Moscouconst moscowTime = now.toZonedDateTimeISO('Europe/Moscow');console.log('Hora em Moscou:', moscowTime.toString());
// Adicionando 2 horasconst later = now.add({ hours: 2 });console.log('Daqui a 2 horas:', later.toZonedDateTimeISO('Europe/Moscow').toString());
// Comparação de datasconst deadline = Temporal.PlainDate.from('2025-12-31');const today = Temporal.Now.plainDateISO();const daysLeft = today.until(deadline).days;console.log(`Faltam ${daysLeft} dias para o prazo final`);2. Decorators: padronização e aplicação prática
Após longos anos de experimentos e propostas, os decorators finalmente entraram no padrão ECMAScript 2025. Ao contrário da versão experimental do TypeScript, a nova sintaxe de decorators é mais flexível e segura. Os decorators permitem adicionar facilmente metadados, logging, validação ou memoização a classes e seus métodos.
Exemplo: decorator para log da execução de uma função em Node.js
function logExecution(target, context) { const methodName = String(context.name); const originalMethod = target;
return function (...args) { console.log(`[LOG] Chamada do método: ${methodName}, argumentos:`, args); const start = performance.now(); const result = originalMethod.apply(this, args); const end = performance.now(); console.log(`[LOG] Método ${methodName} executado em ${(end - start).toFixed(2)} ms`); return result; };}
class DataProcessor { @logExecution processData(data) { // Simulação de trabalho pesado let sum = 0; for (let i = 0; i < 1e6; i++) { sum += data[i % data.length]; } return sum; }}
const processor = new DataProcessor();const result = processor.processData([1, 2, 3, 4, 5]);console.log('Resultado:', result);3. Processamento paralelo de dados: Worker Threads 2.0
O Node.js em 2025 recebeu uma atualização significativa no módulo worker_threads. Agora ele suporta SharedArrayBuffer com operações atômicas e gerenciamento de memória aprimorado. Isso permite processar eficientemente grandes volumes de dados sem bloquear o loop principal de eventos.
Principais melhorias:
- Suporte para
Atomics.waitAsyncpara espera não bloqueante. - Transferência aprimorada de objetos complexos atrav