Desenvolvimento

27 abr, 2018

O que há de novo no Node 10?

Publicidade

Enquanto o Node 8 se mantém como LTS (Latest Stable Version), os desenvolvedores da plataforma publicaram a versão 10, sob o codinome “Dubnium”, na última terça-feira, 24. A versão que agora está disponível para os desenvolvedores mais ansiosos entrará como LTS em outubro deste ano.

Neste artigo, apresentarei uma visão geral das melhorias desta nova versão. Para quem quiser acompanhar as funcionalidades com mais profundidade, eu os convido a visitar o changelog oficial desta versão, disponível neste link (em inglês).

Melhorias de performance com a Engine V8 v6.6

Para quem já tem um conhecimento mínimo de como a tecnologia do Node funciona, sabe que o motor por debaixo do capô é a engine V8, também responsável por dar poder ao Chromium. A versão 10 vem acompanhada da nova versão da engine, a v6.6.

No Chrome 66, a engine trouxe uma melhora em torno de 20-40% no parse e tempo de compilação do JavaScript; podemos esperar algo do tipo também no Node. Além disso, a engine também traz grandes melhorias para Promises e funções assíncronas (async). E como sempre, velocidade e cache são prioridades da engine, o que traz uma performance gigante para a coisa toda. Há mais detalhes sobre o V8 neste link (em inglês).

Nova versão no npm (v6)

O npm também foi recentemente atualizado da versão 5.7 para a 6.0 e o Node já acompanha esta última atualização. Ela contém melhorias significativas nas áreas de performance, segurança e estabilidade. Há mais informações sobre o npm neste link (em inglês).

OpenSSL v1.1.0

O Node vem equipado com suporte criptográfico moderno que permite a altamente esperada codificação ChaCha20 e o autenticador Poly1305. O TLS 1.3 foi finalizado recentemente e, quando o Node atingir o LTS em Outubro, ele agora suportará totalmente o padrão.

Adição de Código de Erros

Os erros no Node agora foram finalmente padronizados para respeitar códigos consistentes seguindo um padrão. Erros sempre foram complicados de se trabalhar no ambiente Node. Antes, eles eram apenas uma mensagem (string) sem nenhum outro identificador associado. Se quiséssemos que o programa realizasse ações com base em uma mensagem específica, a única opção seria fazer uma comparação de strings do conteúdo do erro. Algo como:

try {
  // chamada para uma api
} catch (err) {
  if(err.message === 'mensagem que eu quero') {
        // faça ação 1
  } else {
        // faça ação 2
  }
}

Como o tratamento de erros (como neste exemplo) exige um match exato, era realmente complicado para os desenvolvedores lançarem a menor que fosse das atualizações desta mensagem, pois poderia quebrar muitas aplicações. No entanto, agora temos códigos separados das mensagens, o que torna mais eficaz e seguro este tratamento. De início, é recomendado que façamos algo assim (até que no futuro esteja tudo padronizado):

try {
  // chamada para uma api
} catch (err) {
  if(err.message === 'mensagem que eu quero' || err.code === 'CODIGO_DO_ERRO') {
        // faça ação 1
  } else {
        // faça ação 2
  }
}

Para mais detalhes de como isso tudo funciona daqui pra frente, os convido a ler o artigo da Node.js Foundation, disponível neste link (em inglês).

N-API não é mais experimental

A documentação do Node descreve a N-API como uma API para criar Addons nativos para a plataforma. Ela é totalmente independente do tempo de execução do JavaScript (V8) e é mantido como parte do próprio Node.js. Ela permite que os módulos adicionais criados e compilados para uma versão sejam executados em versões posteriores do Node sem recompilação.

Diagnóstico aprimorado (trace)

Eventos de rastreamento (trace) foram adicionados nesta versão para nos fornecer mais visibilidade do que acontece na execução em tempo real dos nossos programas em Node. Esse novo insight pode fornecer métricas aprimoradas em relação a problemas de tempo de execução e desempenho. A API nos permite ativar ou desativar os eventos em tempo de execução, o que permite diagnosticar problemas sob demanda.

Versão experimental das funções ‘fs’ com Promises

Anteriormente, as funções file system realizavam ações assíncronas por meio de funções de callback, mas podiam ser convertidas usando a função util.promisify() fornecida com o Node 8. Agora, poderemos utilizar o fs com Promises sem precisar da etapa extra.

Versão experimental das funções ‘fs’ com Promises

O ecossistema Node foi o grande responsável pelo “boom” do JavaScript nos últimos anos e não tem deixado a desejar. A cada nova versão, os engenheiros da plataforma trazem novas melhorias que tornam o trabalho com a tecnologia mais seguro, estável, fácil e prazeroso. A minha aposta é de que o Node continuará no topo por um bom tempo ainda.

Referências