Novidades no Node.js 9

Em:

Em maio de 2017 comentamos aqui as principais novidades na versão 8 do Node.js.
Tinha versão nova do npm, do V8, o anúncio da N-API e várias outras coisas interessantes.
Em apenas seis meses de desenvolvimento, já temos uma nova versão com muitas novidades.
O legal dessa versão 9 é que ela é a base para a versão 10, que será LTS e deve sair em outubro de 2018.
A versão 8.9.0 é a atual LTS do Node.js, contando com suporte até dezembro de 2019.
Essa estratégia de liberar um LTS e, ao mesmo tempo, liberar uma nova versão que serve de base para um próximo release é muito eficaz, permitindo que a tecnologia evolua rapidamente e mantendo uma versão estável e com suporte.

Processo de release do Node.js - Créditos da imagem: https://www.joyent.com/blog/nodejs-9-release-summary

Processo de release do Node.js – Créditos da imagem: https://www.joyent.com/blog/nodejs-9-release-summary

Vamos ver algumas das novidades da versão 9:

HTTP 2

Já era possível utilizar http2 no Node.js desde a versão 8.4 com a flag --expose-http2.
Este é um avanço muito significativo, visto que agora nossas aplicações Node.js podem ficar ainda mais rápidas e robustas.
Um dos principais focos do http2 é, com certeza, a performance; porém, o http2 nos abre uma porta de novas oportunidades.

Performance de http2 comparado com http1

Performance de http2 comparado com http1 – Créditos da imagem: http://www.cloudways.com/blog/wp-content/uploads/Http2-gif-new.gif

Para quem quiser saber mais sobre a tecnologia, recomendo a leitura do artigo “Http2” do Ilya Grigorik, um dos gurus de performance Web.
A documentação completa do http2 no Node.js está disponível aqui: https://nodejs.org/api/http2.html

Vamos ver um exemplo (direto da documentação):

const http2 = require('http2');
const fs = require('fs');

const server = http2.createSecureServer({
  key: fs.readFileSync('localhost-privkey.pem'),
  cert: fs.readFileSync('localhost-cert.pem')
});
server.on('error', (err) => console.error(err));
server.on('socketError', (err) => console.error(err));

server.on('stream', (stream, headers) => {
  // stream is a Duplex
  stream.respond({
    'content-type': 'text/html',
    ':status': 200
  });
  stream.end('<h1>Hello World</h1>');
});
server.listen(8443);

Vale lembrar que o http2 exige TLS. Então, é necessário ter as chaves do certificado.

Códigos de erro

Na versão 8, o Node.js passou a ter códigos estáticos de erro para facilitar a nossa vida.
A ideia era ir evoluindo isso aos poucos, e agora na versão 9 temos ainda mais códigos de erro.
A lista completa pode ser vista aqui: https://nodejs.org/api/errors.html#errors_node_js_error_codes

Exemplo de uso:

// Erro quando uma sessão é inválida e já foi destruída
if (err.code === 'ERR_HTTP2_INVALID_SESSION') {
  // faça algo aqui
}

npm 5.5.1

O npm 5.0 foi introduzido na versão 8 do Node.js.
Agora na versão 9, o npm foi atualizado para a versão 5.5.1 e uma das mais notáveis melhorias é o suporte a two-factor authentication.
Vale lembrar que, mesmo para quem estiver usando versões anteriores do Node.js, é possível atualizar o npm separadamente.

Callbackify

Também mostramos aqui no artigo sobre as novidades do Node.js 8 a introdução do promisify(), que permite “promisificar” nossas funções com callback.
Agora no Node.js 9 temos a opção de fazer o contrário, converter uma Promise para uma função com callback tradicional.

const { callbackify } = require('util')
async function main () {
  await Promise.resolve()
}
callbackify(main)(function (err) {
  if (err) {
    return console.error(err)
  }
  console.log('funcionou')
})

Conclusão

É incrível ver a evolução do Node.js e ver como as pessoas e empresas envolvidas estão tomando conta do projeto.
O Node.js hoje, com certeza, ocupa uma posição de destaque no mundo do desenvolvimento e já atua como um dos pilares de inovação na Web.
Essas mudanças rápidas com implementações que, de fato, ajudam desenvolvedores e empresas mostram a maturidade da tecnologia.

Para quem quiser testar o Node.js 9, recomendo a leitura na íntegra do release: https://github.com/nodejs/node/releases/tag/v9.0.0
Algumas soluções de mercado, como o now, já estão suportando a versão, então, já é possível testar em um ambiente próximo à produção.
Além das melhorias citadas aqui, a versão 9 conta com várias correções de bugs e remoção de algumas funcionalidades não mais necessárias.

Referências

https://github.com/nodejs/node/releases/tag/v9.0.0
https://nemethgergely.com/what-is-new-in-nodejs-9/
https://www.joyent.com/blog/nodejs-9-release-summary

  • Números da BrazilJS 2016

    A BrazilJS 2016 foi muito divertida e trouxe muito conteúdo. Além disso, o networking foi fantástico. É sempre ótimo rever a galera e também trocar ideias com desenvolvedores de todos os cantos do Brasil e do mundo. Alguns números 1600 participantes presentes por dia +99 mil mentions no Twitter durante os dois dias de evento […]

  • Feedbacks e ações pós-evento BrazilJS Conf

    Organizar um evento do tamanho da BrazilJS Conf não é tarefa fácil. Passamos praticamente 1 ano inteiro preparando tudo para que os 2 dias de conferência fossem inesquecíveis para todos os participantes. A edição de 2016 foi incrível, mas obviamente há muita coisa que podemos melhorar. Pesquisa de satisfação Estamos computando e analisando os dados […]

  • Iniciando com WebAssembly – Parte 2

    Esta é a segunda parte de uma série inédita de artigos sobre WebAssembly. Vamos escovar uns bits?

Patrocinadores BrazilJS

Gold

Silver

Bronze

Apoio

BrazilJS® é uma iniciativa NASC.     Hosted by Getup