Node.js é um software de código aberto, multiplataforma, baseado no interpretador V8 do Google e que permite a execução de códigos JavaScript fora de um navegador web.
A principal característica do Node.js é sua arquitetura assíncrona e orientada por eventos. O runtime do Node.js é single-thread — uma única thread (chamada de event loop) é responsável por executar o código Javascript, sem a necessidade de criar novas threads, o que torna o código mais simples de manter. Chamadas que seriam bloqueantes, como entrada/saída, são realizadas de forma assíncrona usando a libuv.
Node.js é usado pela GoDaddy,Why GoDaddy’s Nodejitsu deal is great for Node.js, VentureBeat, February 10, 2015 Groupon, IBM, LinkedIn, Microsoft, Netflix,Node.js in Flames November 19, 2014 PayPal, Rakuten, SAP, Voxer,The Node Ahead: JavaScript leaps from browser into future, The Register, March 1, 2011 Walmart, e Yahoo!.
Histórico thumb|upright|Ryan Dahl, Criador do Node.js
O Node.js foi inicialmente escrito por Ryan Dahl em 2009, cerca de 13 anos após a introdução do primeiro ambiente JavaScript para servidores, o LiveWire Pro Web da Netscape. A versão inicial oferecia suporte apenas a Linux e Mac OS X. Seu desenvolvimento e manutenção foram liderados por Dahl e posteriormente patrocinados pela Joyent.
Dahl criticou a capacidade limitada do Apache HTTP Server de lidar com muitas (10.000+) conexões simultâneas, bem como o paradigma dominante de programação sequencial, no qual aplicações poderiam bloquear processos inteiros ou causar a criação de múltiplas pilhas de execução para conexões simultâneas.
Dahl demonstrou o projeto na conferência inaugural European JSConf em 8 de novembro de 2009. O Node.js combinou o mecanismo JavaScript do Google V8, um laço de eventos e uma API de E/S de baixo nível.[https://books.google.com/books?id=ZH6bpbcrlvYC&q=nodejs Professional Node.js: Building JavaScript Based Scalable Software], John Wiley & Sons, 01-Oct-2012
Em janeiro de 2010, foi introduzido um gerenciador de pacotes para o ambiente Node.js chamado npm. O gerenciador de pacotes permite que programadores publiquem e compartilhem pacotes Node.js junto com o código-fonte correspondente, sendo projetado para simplificar a instalação, atualização e desinstalação de pacotes.
Em junho de 2011, a Microsoft e a Joyent implementaram uma versão nativa de Node.js para Windows. A primeira versão do Node.js com suporte ao Windows foi lançada em julho de 2011.
Em janeiro de 2012, Dahl entregou a gestão do projeto ao criador do npm, Isaac Schlueter. Em janeiro de 2014, Schlueter anunciou que Timothy J. Fontaine lideraria o projeto.
Em dezembro de 2014, Fedor Indutny criou o io.js, um fork do Node.js criado devido à insatisfação com a governança da Joyent — como uma alternativa de governança aberta com um comitê técnico separado. O objetivo era permitir uma estrutura mais receptiva à contribuição da comunidade, incluindo a atualização do io.js com as versões mais recentes do mecanismo Google V8 JavaScript, divergindo da abordagem do Node.js na época.[https://www.infoworld.com/article/2855057/application-development/why-iojs-decided-to-fork-nodejs.html Q&A: Why io.js decided to fork Node.js], InfoWorld Tech Watch
A Node.js Foundation, criada para reconciliar o Node.js e o io.js sob uma bandeira unificada, foi anunciada em fevereiro de 2015.
A fusão foi concretizada em setembro de 2015, com o Node.js v0.12 e o io.js v3.3 se combinando no Node v4.0.
Essa fusão trouxe recursos ES6 do V8 para o Node.js e iniciou um ciclo de lançamentos de suporte de longo prazo. Em 2016, o site do io.js recomendava o retorno ao Node.js e anunciava que não haveria mais versões do io.js, encerrando efetivamente o fork e consolidando o sucesso da fusão.[https://iojs.org/en/ Io.js, JavaScript I/O], "io.js has merged with the Node.js project again. There won't be any further io.js releases. All of the features in io.js are available in Node.js v4 and above."
Em 2019, a JS Foundation e a Node.js Foundation se fundiram para formar a OpenJS Foundation.
Características A principal característica e diferença de outras tecnologias (como PHP, Java, C# e C) é a execução das requisições/eventos em single-thread, onde apenas uma thread (chamada de event loop) é responsável por executar o código Javascript, sem a necessidade de criar nova thread que utilizaria mais recursos computacionais (por exemplo memória RAM) e sem o uso da fila de espera.
Gerenciamento de pacotes O gerenciamento dos pacotes é feito através do node package manager (npm), e npx (node package extractor), o npx foi introduzido na versão 5.2.0 do JavaScript, antes deveria ser instalado individualmente. O primeiro tem o propósito de instalar para uso posterior código armazenado num package de nodejs, instalando o software globalmente ou localmente, já o segundo tem o propósito de executar a nível local o código instalado globalmente. Um exemplo disso é o npx create-react-app que tem como propósito instalar em nível local um modelo vazio de um app React.
Vantagens de uso
Flexibilidade O Node.js possui o gerenciador com inúmeros pacotes e software reusável NPM (Node Package Manager), dando ao interpretador um potencial a ser utilizada em qualquer situação. O pacote mais conhecido é o Express.js, um arcabouço (framework) completo para desenvolvimento de aplicações web.
Leveza Um ambiente Node.js não exige muitos recursos computacionais tradicionais. Se utilizado em conjunto com a ferramenta Docker, o ganho na velocidade de deployment e replicação de máquinas pode ser muito significativo e, em ambientes escaláveis, de microsserviços e serverless, representa menos custo e mais eficiência. Um exemplo de uso é uma aplicação de bate-papo.
Suporte Conta com suporte das principais empresas de serviços de armazenamento na nuvem, como a AWS, Google Cloud e, Microsoft Azure, com suporte nativo ao Node.JS.
Produtividade O gerenciador NPM fornece pacotes reusáveis disponíveis gratuitamente para uso em grupo;
Mesma linguagem no front end e back end, que pode representar ganhos de reúso de código e criação de equipes multidisciplinares, reaproveitando recursos;
A possibilidade de deployments e iterações mais rápidas, e resolução de problemas on the fly, também permitem a criação de soluções próprias e inovadoras, como a Uber faz para resolver alguns problemas.
Exemplo
Exemplo de um web service RESTful (HTTP) com serialização para JSON, usando o framework Express.js:
import express from 'express'
const app = express() const port = 3000
app.get('/', (req, res) => { const now = new Date()
res.status(200).send({ message: `Olá, Mundo!`, timestamp: now.toJSON(), }) })
app.listen(port, () => { console.debug(`Listening on http://localhost:${port}`) })
Considerando que o código acima está num arquivo chamado server.js, pode ser executado com o seguinte comando:
$ npm start
Ver também Bun (software) Deno (software) Express.js Go (linguagem de programação) npm (software)
Ligações externas
Categoria:JavaScript Categoria:Bibliotecas JavaScript Categoria:Software livre programado em C++