Novidades no Node.js 9

Por:
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

Cursos recomendados pela BrazilJS

    • Weekly #189 – Node.js no RSJS, os primos do JavaScript e ReactXP

      A BrazilJS Weekly é a seleção semanal de novidades sobre o desenvolvimento Web no Brasil e no mundo. Ainda não é inscrito? Faça o seu cadastro e receba nossa Newsletter semanal 😎👊🙂👌👍 Sugira conteúdo para a Weekly usando o nosso canal de issues no Github. Um agradecimento especial aos 15 colaboradores da edição nº 189!

    • Otimização é o foco para conquistar o usuário

      Como já sabemos, otimização é um assunto recorrente, mas necessário. A otimização está diretamente ligada à experiência que o usuário tem da sua aplicação. Por isso, nada melhor do que dar uma atenção extra a esse tópico.

    • Posição sobre quebra do Código de Conduta  –  BrazilJS Conf 2015

      Infelizmente tomamos conhecimento de uma violação do código de conduta da BrazilJS Conf 2015. Este fato chegou até nós após a conferência. Ou seja, uma atitude durante o evento (que é o ideal) se tornou impossível. Levamos a sério o código de conduta e acreditamos que todos os 1300 participantes também. Estamos discutindo como organização, […]

    Patrocinadores BrazilJS

    Gold

    Silver

    Bronze

    Apoio

    BrazilJS® é uma iniciativa NASC.