Qual a diferença entre o Node.js e outras estruturas do lado do servidor?

21

Percebi que o Node.js se tornou muito popular e já vi várias instâncias de pessoas fazendo projetos de pequena escala.

Também examinei as listas de prós e contras para ter uma idéia do que o Node.js pode fazer, mas ainda não estou claro como ele difere de outras tecnologias mais maduras do lado do servidor, como PHP, Perl ou Ruby no Trilhos.

O que, especificamente, diferencia o Node.js das alternativas atuais e por quê?

Saeed Neamati
fonte
1
@ downvoter - por que o voto negativo? exceto pelo segundo parágrafo (você não pode realmente perguntar por que começar algo quando alguém fez isso porque você sempre pode fazer melhor), acho essa pergunta intrigante. Eu sempre pensei nisso.
David Peterman
É um pouco mais difícil de escolher, mas se você pesquisar na frase citada "node.js", receberá cerca de 3 milhões de acessos.
9788 Peter Parkerell
@ Peter, sim, eu tentei isso, e você está certo. Mas 3 milhões ainda são dois a mais. Você pode voltar um ano depois, e esse número provavelmente subiu para 10 milhões. :)
Saeed Neamati
3
@ Mark, obrigado pela excelente edição. Está mais claro agora.
Saeed Neamati 9/09/11

Respostas:

18

Há duas coisas importantes que tornam o Node.js diferente das estruturas existentes do lado do servidor, eventos assíncronos e o uso de JavaScript como linguagem de programação.

Eventos Assíncronos

Enquanto a maioria das estruturas existentes do lado do servidor usa uma arquitetura síncrona, o Node.js usa uma arquitetura assíncrona , com a qual o JavaScript pode lidar bem. Isso significa que o servidor reage a eventos e envia eventos (mensagens) para, por exemplo, o banco de dados. Esse estilo de programação é muito diferente de um estilo síncrono e pode ser difícil de usar com outros idiomas. O Node.js emprega um estilo assíncrono com E / S assíncronas e pode ser bem dimensionado.

Veja também Arquitetura Orientada a Eventos

Javascript

JavaScript é a linguagem de programação que os aplicativos da web estão usando no cliente. Usar o mesmo idioma no lado do servidor significa que o desenvolvedor pode aplicar seu conhecimento de JavaScript no cliente e no servidor e usar as mesmas funções necessárias.

Eu recomendaria a apresentação Introdução ao Node.js. com Ryan Dahl, onde ele explica a arquitetura orientada a eventos do Node.j em mais detalhes.

Jonas
fonte
2
Essa é facilmente a melhor resposta até agora, mas eu colocaria os Eventos Assíncronos em primeiro lugar, pois é isso que torna o Node.js tão atraente quanto uma estrutura do lado do servidor. Bom trabalho, porém, mencionando E / S assíncrona e escalabilidade. Esse é o coração disso.
Adam Crossland
Bem, @Jonas, ainda não entendo. O ASP.NET também é baseado em eventos. Então, qual é a diferença entre Node.js e ASP.NET? É apenas porque é assíncrono? Nesse caso, acho que o uso de multithreading no ASP.NET pode fazer o mesmo, não é?
Saeed Neamati 9/09/11
3
@Saeed: o ASP.NET é encadeado e síncrono, por exemplo, ao acessar o banco de dados, o encadeamento é bloqueado e aguarda uma resposta do banco de dados. E ao usar muitos threads (por exemplo, um por solicitação), muita memória é usada (cada thread precisa de uma quantidade muito grande de memória), que pode ser um gargalo. O Node.js envia mensagens e reage a eventos, para que nunca (espero) bloqueie o encadeamento. Com o node.js, você está usando o mesmo modelo de programação do lado do cliente com o Ajax ( javascript assíncrono e XML) e o mesmo idioma.
Jonas
Você esqueceu a grande comunidade de código aberto por trás disso.
Raynos 9/09/11
3
Quando o C # 5 rola com as novidades async, isso pode mudar. O problema não é que você não pode escrever código assíncrono escalonável em outros idiomas; é mais difícil fazê-lo (corretamente) sem um bom suporte no nível do idioma.
precisa saber é o seguinte
6

É diferente porque é orientado a eventos . Isso torna o servidor altamente escalável.

Em poucas palavras;

Modelo de Rosca

  1. Cliente pede algo
  2. O servidor desliga e processa a solicitação
  3. Devolve ao cliente
  4. Pronto para processar uma nova solicitação

Modelo de Evento

  1. Cliente pede algo
  2. O servidor passa a solicitação para processamento. Pronto para processar uma nova solicitação
  3. O servidor lida com mais solicitações à medida que elas chegam
  4. O servidor devolve dados ao cliente quando a solicitação termina o processamento
Tom Squires
fonte
@ Tom, o que você quer dizer com orientado a eventos? O ASP.NET WebForms também é orientado a eventos e você pode ver manipuladores como Session_Startedou Context_Authenticatedou Page_Load?
Saeed Neamati 9/09/11
1
Chamá-lo de orientado a eventos é mais ambíguo do que o necessário e não chega ao coração do Node.JS: E / S assíncrona.
Adam Crossland
2

Eu tenho a impressão de que sua popularidade se deve ao uso de JavaScript. Como muitos desenvolvedores da Web conhecem JavaScript, é um ponto de venda que agora eles podem desenvolver código do lado do servidor usando o mesmo idioma. Isso tem algumas vantagens em que consigo pensar:

  • Os arquivos de código podem ser compartilhados entre servidor e cliente, impedindo a duplicação de esforços apenas para lidar com os dois lados do sistema.
  • Os desenvolvedores não precisam alternar mentalmente entre idiomas. (não é grande coisa na minha opinião)
  • Os arquitetos não precisam escolher vários idiomas ao arquitetar uma solução da web.
  • Alguém que nunca desenvolveu código do lado do servidor agora pode fazê-lo sem aprender um idioma diferente. (Não é provável que seja um argumento valioso, IMHO)
John Fisher
fonte
O Node.JS é popular porque é rápido e dimensiona bem. O fato de estar em JavaScript é bom, mas em grande parte incidental.
Adam Crossland
2
O mais valioso é que os desenvolvedores do lado do servidor podem escrever código do lado do cliente no mesmo idioma e que você pode compartilhar os módulos do lado do servidor com o cliente. Não o contrário. Eu não gostaria de portar código hackeado do lado do cliente para o servidor, isso é um tiro no pé.
Raynos 9/09/11
@ Adam: Por que o node.js está se tornando popular quando já existem tecnologias que se encaixam na descrição "rápido e dimensiona bem"? - Porque é JavaScript.
John Fisher
@John É mais difícil escrever aplicativos que não escalam bem no Node.js. Se o seu aplicativo for intensivo em disco / rede do que em CPU (o que é mais), você poderá facilmente suportar muitas vezes mais conexões simultâneas em um único núcleo do que a maioria dos outros servidores, a menos que você escreva um código de encadeamento muito complicado.
precisa saber é o seguinte
@ Davy8: Eu acho que tudo depende dos outros frameworks / sistemas que você usou. A facilidade de escalabilidade que você descreve já é simples com as ferramentas que eu uso. A única coisa que o Node.js oferece do meu ponto de vista é o sabor do JavaScript, que não é atraente.
John John Fisher