Plataforma JavaScript Node.js 22.0.0 disponível

Foi lançado o Node.js 22.0, uma plataforma para execução de aplicações de rede em JavaScript. O Node.js 22.0 é classificado como branch de suporte de longo prazo, mas esse status será atribuído apenas em outubro, após a estabilização. O Node.js 22.x terá suporte até 30 de abril de 2027. A manutenção da ramificação LTS anterior do Node.js 20.x durará até abril de 2026, e do ano anterior à última ramificação LTS 18.x até abril de 2025. A ramificação de teste do Node.js 21.x será descontinuada em 1º de junho de 2024.

Principais melhorias:

  • O motor V8 foi atualizado para a versão 12.4, utilizada no Chromium 124. Dentre as mudanças em relação ao ramo Node.js 21, que utilizava o motor V8 11.8), destaca-se:
    • Suporte para a extensão WasmGC, que simplifica a portabilidade de programas escritos em linguagens de programação que utilizam coletor de lixo (Kotlin, PHP, Java, etc.) para WebAssembly. WasmGC adiciona novos tipos de estruturas e arrays que podem usar alocação de memória não linear.
    • Suporte para o método Array.fromAsync(), que retorna de forma assíncrona uma nova instância de um objeto Array copiado de um objeto iterável tipo array, iterável ou assíncrono.
    • Suporte para métodos iteradores como .map, .filter, .find, .take, .drop, .forEach e .reduce.
    • Suporte para um objeto Set que define uma coleção de valores e oferece métodos que implementam operações comuns de conjunto, como interseção, união, diferença e adição.
  • O compilador JIT de otimização Maglev é habilitado por padrão, com o objetivo de gerar rapidamente código de máquina de alto desempenho para código JavaScript muito usado. A ativação do Maglev pode acelerar significativamente aplicativos CLI de curta duração que não executam operações de longo prazo, por exemplo, o tempo para concluir o teste Jetstrea é reduzido em 7.5% e o teste do velocímetro em 5%.
  • O trabalho com fluxos foi acelerado aumentando o valor da opção highWaterMark de 16 KB para 65 KB (define o limite até o qual a gravação é armazenada em buffer). A alteração resulta em aumento do consumo de memória, portanto, os aplicativos projetados para serem executados em RAM limitada podem precisar reverter para o valor antigo por meio de uma chamada para setDefaultHighWaterMark().
  • Desempenho aprimorado das APIs fetch() e do executor de teste, tornando a instanciação do AbortSignal mais eficiente. O desempenho das APIs relacionadas ao trabalho síncrono com sistemas de arquivos foi melhorado.
  • Um recurso experimental foi fornecido para usar a chamada "require()" para carregar módulos JavaScript ESM (Módulos ECMAScript) em modo síncrono. Os módulos ESM são usados ​​em navegadores e substituem os módulos CommonJS específicos do Node.js. Para carregar via "require()", o módulo ESM deve ser executado em modo síncrono (sem espera no nível superior). O suporte é habilitado por meio do sinalizador “--experimental-require-module”.
  • Adicionada capacidade experimental para executar scripts definidos no arquivo package.json usando o comando "--run" "
  • O comando “node –watch” foi movido para a categoria estável com a implementação de um modo watch que garante que o processo seja reiniciado quando o arquivo importado for alterado (por exemplo, se “node –watch index.js” for executado, o o processo será reiniciado automaticamente quando o index.js for alterado).
  • A implementação nativa da API WebSocket foi estabilizada, permitindo que o WebSocket seja usado no modo cliente sem instalar dependências adicionais.
  • Adicionado suporte parcial para a API Navigator.
  • A API Webstreams adicionou suporte para o formato de compactação deflate-raw.
  • Adicionadas funções glob e globSync ao node:fsmodule para correspondência de padrões de caminhos de arquivo.
  • Tratamento aprimorado de pilhas IPv6 configuradas incorretamente. Implementado o algoritmo Happy Eyeballs para reversão rápida em caso de problemas com a operação do IPv6.
  • A API util foi descontinuada.
  • Versões de dependência atualizadas: npm 10.5.1, libuv 1.48.0, simdutf 5.2.3, c-ares 1.28.1, zlib 1.3.0.1-motley-24c07df, simdjson to 3.8.0, ada 2.7.7 e undici 6.6.0 .

A plataforma Node.js pode ser usada tanto para suporte do lado do servidor em aplicações web quanto para a criação de programas de rede padrão, tanto do lado do cliente quanto do servidor. Para expandir a funcionalidade das aplicações Node.js, uma grande coleção de módulos foi preparada, incluindo aqueles que implementam servidores e clientes de HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integração com diversas estruturas web, manipuladores de WebSocket e Ajax, conectores para SGBD (MySQL, PostgreSQL, SQLite, MongoDB), mecanismos de templates, mecanismos de CSS, implementações de algoritmos criptográficos e sistemas de autorização (OAuth), analisadores XML.

Para lidar com um grande número de solicitações paralelas, o Node.js usa um modelo de execução de código assíncrono baseado no processamento de eventos sem bloqueio e na definição de manipuladores de retorno de chamada. Os métodos suportados para conexões de multiplexação incluem epoll, kqueue, /dev/poll e select. Para multiplexação de conexões, é utilizada a biblioteca libuv, que é um complemento da libev em sistemas Unix e do IOCP no Windows. A biblioteca libeio é usada para criar um pool de threads e c-ares é integrado para realizar consultas DNS em modo sem bloqueio. Todas as chamadas do sistema que causam bloqueio são executadas dentro do pool de threads e então, como manipuladores de sinal, passam o resultado de seu trabalho de volta por meio de um canal sem nome.

A execução do código JavaScript é garantida através da utilização do motor V8 desenvolvido pelo Google (além disso, a Microsoft está desenvolvendo uma versão do Node.js com o motor Chakra-Core). Em sua essência, o Node.js é semelhante aos frameworks Perl AnyEvent, Ruby Event Machine, Python Twisted e à implementação de eventos em Tcl, mas o loop de eventos no Node.js está oculto do desenvolvedor e se assemelha ao processamento de eventos em um aplicativo da web rodando no navegador.

Fonte: opennet.ru

Adicionar um comentário