O que é tão exclusivo sobre o Node.js? [fechadas]

48

Recentemente, houve muitos elogios para o Node.js. Eu não sou um desenvolvedor que teve muita exposição ao aplicativo de rede. Do meu conhecimento básico do Nodes.js, sua força é: temos apenas um thread lidando com várias conexões, fornecendo uma arquitetura baseada em eventos.

No entanto, por exemplo, em Java, posso criar apenas um thread usando o NIO / AIO (que é APIs não bloqueantes a partir do meu entendimento) e manipular várias conexões usando esse thread, e forneço uma arquitetura baseada em eventos para implementar a lógica de manipulação de dados (não deve ser tão difícil, fornecendo algum retorno de chamada etc.)?

Como a JVM é uma VM ainda mais madura que a V8 (espero que ela seja mais rápida também), e a arquitetura de manipulação baseada em eventos parece ser algo difícil de criar, não sei por que o Node.js está atraindo muito atenção. Eu perdi alguns pontos importantes?

    
por Adrian Shum 19.06.2012 / 04:34
fonte

3 respostas

33

Embora esse conceito possa de fato ser implementado em vários idiomas (e como dodgy_coder mencionado, ele foi implementado em Ruby e Python, pelo menos), não é tão trivial quanto você afirma.

True, o Java possui APIs de E / S não bloqueantes. Assim, você pode fazer IO bruto de disco / rede de maneira não-bloqueante. No entanto, cada API que de alguma forma envolve ou lida com , o IO também precisa ser implementado de forma não-bloqueante. Cada analisador XML, cada driver de banco de dados, cada conversor de formato de arquivo precisa ser escrito para suportar o IO sem bloqueio. Porque, se uma única biblioteca estiver bloqueando nesse padrão, isso reduzirá o desempenho de seus servidores para valores da idade da pedra.

O Node.js tem essa infraestrutura de biblioteca, porque sempre foi projetado dessa maneira: toda biblioteca que se esforça para se tornar popular tem para fornecer uma API assíncrona ou não será usada.

    
por 19.06.2012 / 09:43
fonte
19

Provavelmente, o principal motivo é que ele usa JavaScript para escrever componentes do lado do servidor para coisas como servidores da Web, aplicativos da Web ou serviços da Web. Isso unifica a linguagem de desenvolvimento tradicional front-end (do lado do cliente) JavaScript com a linguagem do lado do servidor.

Você está certo - o fato de ser não-bloqueador, usando o padrão reator não é único - foi feito antes de usar outras linguagens e frameworks, como o EventMachine do Ruby ou o Twisted do Python, por exemplo.

    
por 19.06.2012 / 05:35
fonte
10

As três principais razões que eu daria são:

  1. Non-Blocking IO / Asynchronous IO. Isso é confundido em todos os lugares da web e nos pôsteres anteriores. Uma coisa que eu gostaria de contribuir é que projetar seu código para assumir explicitamente comportamentos assíncronos auxilia o mecanismo de compilação a maximizar o hardware. Sim, muitos dos compiladores JIT e processadores hyperthreading usam códigos síncronos e ajudam a paralelizar a execução. Isto, obviamente, é uma abordagem de melhor esforço. Em contraste, construindo explicitamente o aplicativo para o async io você garante que o mecanismo e o hardware possam maximizar o tempo de execução do seu código. Evidentemente, eu não tenho dados quantificáveis para provar isso, mas isso me faz sentir quente por dentro para pensar dessa maneira.

  2. Base de código único para cliente e servidor. Isso tem várias vantagens: ajudar a otimizar os custos do datacenter, pois é capaz de mover a lógica de negócios do servidor para o cliente; ajudar a reutilizar a lógica de negócios / validação de dados; reduza a complexidade das habilidades do desenvolvedor que precisam existir para suportar o produto (em comparação com o Python e o javascript).

  3. Baixa barreira à entrada. Em muitos aspectos, o Javascirpt é como Básico, Pascal e Perl do ano anterior. É super fácil começar a escrever código e não requer muito conhecimento de domínio para começar. Isso também ajuda a reduzir seus custos de desenvolvimento, sendo capaz de trazer mais desenvolvedores de jr e obter o aumento de um projeto. [Claro que você precisa superar os ideólogos que acreditam que as linguagens de programação devem ser difíceis para eliminar os desenvolvedores com baixo desempenho]

por 22.06.2012 / 09:27
fonte