Plataforma JavaScript Node.js 21.0 do lado do servidor disponível

Foi lançado o Node.js 21.0, uma plataforma para execução de aplicações de rede em JavaScript. A ramificação Node.js 21.0 terá suporte por 6 meses. Nos próximos dias será concluída a estabilização da filial Node.js 20, que receberá o status LTS e terá suporte até abril de 2026. A manutenção do branch LTS anterior do Node.js 18.0 durará até setembro de 2025, e do penúltimo branch LTS 16.0 do ano anterior até abril de 2024.

Principais melhorias:

  • A API Fetch foi declarada estável, projetada para carregar recursos pela rede e simplificar a escrita de código JavaScript universal adequado para trabalhar no servidor e no cliente. A implementação é baseada no código do cliente HTTP/1.1 undici e é o mais próximo possível da API semelhante fornecida nos navegadores. A API inclui o método fetch() e objetos Headers. Solicitação e Resposta, representando os cabeçalhos HTTP, solicitação e resposta. const res = aguarda fetch('https://nodejs.org/api/documentation.json'); if (res.ok) { const data = aguarda res.json(); console.log(dados); }
  • O suporte para a API WebStreams, que fornece acesso aos fluxos de dados recebidos pela rede, foi estabilizado. A API permite adicionar seus próprios manipuladores que trabalham com os dados à medida que as informações chegam pela rede, sem esperar o download do arquivo inteiro. Os objetos disponíveis em Node.js incluem ReadableStream*, TransformStream*, WritableStream*, TextEncoderStream, TextDecoderStream, CompressionStream e DecompressionStream.
  • Adicionada implementação experimental do cliente WebSocket, compatível com navegadores. Para habilitar o suporte WebSocket, o sinalizador “--experimental-websocket” é fornecido.
  • Adicionado modo experimental para utilização da implementação padrão de módulos JavaScript ESM (Módulos ECMAScript, usados ​​em módulos para navegadores) em vez de CommonJS (específico para Node.js). A mudança não afeta módulos cujo formato é explicitamente definido por meio do campo "type" em package.json, especificado por meio do sinalizador "--input-type", ou é óbvio devido à extensão do arquivo (.mjs para ESM, .cjs para CommonJS). No entanto, os módulos que não são explicitamente definidos como CommonJS (por exemplo, possuem uma extensão “.js”) serão tratados como módulos ESM quando o novo modo for habilitado. Para ativar as novas configurações do módulo, o sinalizador “--experimental-default-type” foi proposto.
  • O mecanismo V8 foi atualizado para a versão 11.8, usada no Chromium 118, que agora suporta o método ArrayBuffer.prototype.transfer, a capacidade de agrupar arrays (método groupBy) e instruções WebAssembly para processamento de constantes (i32.add, i32.sub, i32.mul, i64 .add, i64.sub e i64.mul).
  • O suporte para o manipulador globalPreload foi descontinuado, em favor de chamadas de registro e inicialização para configurar módulos.
  • Uma opção “flush” foi adicionada à função fs.writeFile para forçar a descarga dos dados na unidade após cada operação de gravação.
  • Desempenho aprimorado de código relacionado à análise de URL, API de busca, streams, node:fs e HTTP.
  • Adicionado objeto navegador global. Por exemplo, para obter dados sobre o número de núcleos da CPU, você pode usar a propriedade navigator.hardwareConcurrency.
  • No parâmetro “—test”, foi adicionado suporte para máscaras glob para selecionar testes a serem executados (por exemplo, você pode especificar “—test **/*.test.js.”).
  • O gerenciador de pacotes empacotado npm 10.2.0 e o analisador llhttp 9.1.2 foram atualizados.
  • O suporte para Visual Studio 2019 e versões do macOS anteriores à 11.0 foi descontinuado.

A plataforma Node.js pode ser usada tanto para suporte de aplicativos da Web no lado do servidor quanto para criar programas comuns de rede de clientes e servidores. Para ampliar a funcionalidade das aplicações para Node.js, foi preparado um grande acervo de módulos, onde você encontra módulos com implementação de servidores e clientes HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, módulos para integração com diversos frameworks web, manipuladores WebSocket e Ajax, conectores para SGBD (MySQL, PostgreSQL, SQLite, MongoDB), motores de templates, motores 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. Ao escrever aplicativos para node.js, é necessário levar em consideração as especificidades da programação orientada a eventos, por exemplo, em vez de fazer “var result = db.query(“select..”);” com a espera pela conclusão do trabalho e posterior processamento dos resultados, o Node.js utiliza o princípio da execução assíncrona, ou seja, o código é transformado em “db.query(“select..”, function (result) {processamento de resultado});”, no qual o controle passará imediatamente para outro código, e o resultado da consulta será processado conforme os dados chegam.

Fonte: opennet.ru

Adicionar um comentário