Foi lançado o Node.js 16.0, uma plataforma para a execução de aplicações de rede em JavaScript. O Node.js 16.0 está classificado como uma versão de longo prazo de suporte, mas esse status será concedido apenas em outubro, após a estabilização. O suporte para o Node.js 16.0 será mantido até abril de 2023. O suporte para a versão LTS anterior, Node.js 14.0, continuará até abril de 2023, enquanto o suporte para a versão LTS anterior a esta, 12.0, irá até abril de 2022. O suporte para a versão LTS 10.0 será encerrado em 10 dias.
Principais melhorias:
- O motor V8 foi atualizado para a versão 9.0 (a versão 8.6 foi utilizada no Node.js 15), o que permitiu implementar no Node.js 16 recursos como a propriedade 'indices' para expressões regulares (que inclui um array com as posições inicial e final dos grupos de correspondência), o método Atomics.waitAsync (uma versão assíncrona do Atomics.wait), e suporte para o uso da palavra-chave await em módulos no nível superior. O chamado de funções foi acelerado, especialmente quando o número de argumentos passados não corresponde ao que foi definido nos parâmetros da função.
- Foi estabilizada a API Timers Promises, que fornece um conjunto alternativo de funções para trabalhar com timers, retornando objetos Promise, permitindo a utilização sem a necessidade do util.promisify(). import { setTimeout } from 'timers/promises'; async function run() { await setTimeout(5000); console.log('Hello, World!'); } run();
- Foi adicionada uma implementação experimental da API Web Crypto, destinada à execução de operações criptográficas básicas em aplicações web, como manipulação de hashes criptográficos, geração e verificação de assinaturas digitais, codificação e decodificação de dados usando diferentes métodos de criptografia e geração de números aleatórios criptograficamente seguros. A API também inclui funções para geração e gerenciamento de chaves.
- O N-API (API para desenvolvimento de complementos) foi atualizado para a versão 8.
- Foi realizada a transição para a nova versão do gerenciador de pacotes NPM 7.10.
- Foi estabilizada a implementação da classe AbortController, baseada na Web API AbortController, que permite cancelar sinais em APIs baseadas em Promise.
- Foi estabilizado o suporte para a terceira versão do formato Source Map, utilizado para mapear módulos gerados, processados ou compactados com o código-fonte original.
- Para compatibilidade com APIs web obsoletas, foram adicionados os métodos buffer.atob(data) e buffer.btoa(data).
- Começou a formação de composições para novos dispositivos Apple equipados com o chip ARM M1.
- Na plataforma Linux, os requisitos para a versão do compilador foram elevados para GCC 8.3.
Lembramos que a plataforma Node.js pode ser utilizada tanto para suporte ao servidor de aplicativos Web, quanto para a criação de programas de rede tanto clientes quanto servidores. Para expandir a funcionalidade dos aplicativos para Node.js, foi preparada uma grande coleção de módulos, onde é possível encontrar módulos com implementações. servidores e clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integração com diversos frameworks web, manipuladores WebSocket e Ajax, conectores a bancos de dados (MySQL, PostgreSQL, SQLite, MongoDB), motores de template, motores CSS, implementações de algoritmos de criptografia e sistemas de autorização (OAuth), parsers XML.
Para garantir o processamento de um grande número de solicitações paralelas, o Node.js utiliza um modelo assíncrono de execução de código, baseado em processamento de eventos em modo não bloqueante e determinação de manipuladores de callback. Como métodos de multiplexação de conexões, são suportados métodos como epoll, kqueue, /dev/poll e select. Para a multiplexação de conexões, usa-se a biblioteca libuv, que é uma camada de abstração sobre libev em sistemas Unix e sobre IOCP no Windows. Para criar um pool de threads, a biblioteca libeio é utilizada, e para a execução de consultas DNS de maneira não bloqueante, o c-ares foi integrado. Todas as chamadas de sistema que causam bloqueio são executadas dentro do pool de threads e, assim como os manipuladores de sinais, transmitem o resultado de seu trabalho de volta através de um canal não nomeado (pipe). A execução de código JavaScript é garantida pela utilização do mecanismo V8 desenvolvido pela Google (adicionalmente, a Microsoft desenvolve uma versão do Node.js com o mecanismo Chakra-Core).
Essencialmente, o Node.js é semelhante aos frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted e à implementação de eventos em Tcl, mas o ciclo de processamento de eventos (event loop) no Node.js é oculto do desenvolvedor e se assemelha ao processamento de eventos em uma aplicação web que funciona em um navegador. Ao escrever aplicativos para Node.js, é necessário considerar a especificidade da programação orientada a eventos; por exemplo, em vez de executar "var result = db.query('select..');" aguardando a conclusão e posterior processamento dos resultados, no Node.js utiliza-se o princípio da execução assíncrona, ou seja, o código é transformado em "db.query('select..', function (result) { processar resultado });", onde o controle é imediatamente transferido para o restante do código, e o resultado da consulta será processado conforme os dados forem recebidos.
Adicionalmente, pode-se destacar que a empresa Deno, fundada pelo criador do Node.js para o desenvolvimento da plataforma de nova geração Deno, recebeu 4,9 milhões de dólares em investimentos. Em sua finalidade, Deno se assemelha ao Node.js, mas tenta corrigir erros conceituais cometidos na arquitetura do Node.js e oferecer aos usuários um ambiente mais seguro. É observado que as soluções de negócios da Deno serão construídas com base em produtos totalmente abertos, enquanto o modelo Open Core com a separação de funcionalidades pagas é considerado inaceitável para a plataforma Deno.
Fonte: opennet.ru
