Node.js não é um produto perfeito, ele tem desvantagens (usar JS?). Alguns deles se arrastaram desde um estágio inicial de desenvolvimento devido a decisões errôneas feitas por Ryan Dahl, que foram brevemente lembradas no artigo Como o criador do node.js fica frustrado com isso . Como costuma acontecer, em alguns casos é difícil ou impossível encontrar uma alternativa a este sistema, especialmente no setor empresarial. Mas se você não precisa oferecer suporte a um grande código legado, que fornecerá aos programadores trabalho por muitos anos, então você pode buscar outras soluções. Você pode ler sobre o "assassino do Node.js" no artigo mencionado acima; alguns outros serão discutidos neste artigo.
ASP.NET
“Um velho amigo é melhor do que dois novos”. O ASP.NET tem uma longa história. A tecnologia Active Server Pages, que formou a base dos serviços ASP.NET, foi desenvolvida no final do século passado. É claro que o tempo de desenvolvimento nem sempre é bom, mas a longa vida do produto fala muito. Embora o ASP.NET tenha um princípio de operação completamente diferente, não é apenas um ambiente para executar o código do programa e conectar módulos, é uma plataforma para a criação de serviços da Web; geralmente é usado para resolver problemas semelhantes ao Node.js.
Se o Node.js é fruto da imaginação de uma pequena equipe e, em sua forma mais básica, é um ambiente para lançar programas JS fora do navegador com acesso a E / S, então o ASP.NET é um produto típico de uma grande corporação. Inicialmente, ele contém um grande número de bibliotecas padrão que permitem imediatamente que você comece a desenvolver. O Node se desenvolve graças à comunidade de desenvolvedores e, portanto, o sistema deve primeiro ser equipado com todos os módulos necessários, que são simplesmente incríveis. O mais simples "Olá, mundo!" no Node arrastará vários milhares de arquivos para o sistema. Além disso, a quantidade nem sempre se transforma em qualidade, às vezes parece que os desenvolvedores estão até prontos para enfiar “i ++” em um módulo separado, que será baixado um milhão de vezes, e uma atualização ou remoção repentina deste pacote irá causar sérios problemas de compatibilidade ou travar o npm.No ASP, a segurança e as atualizações são monitoradas pelo ecossistema da Microsoft, as bibliotecas escritas por ele e outras grandes empresas são cuidadosamente verificadas quanto a erros e problemas de compatibilidade ...
Apesar das muitas diferenças, uma das principais é uma abordagem diferente para a distribuição de cálculos. No Node.js, tudo era feito em um único thread, mas usando E / S assíncrona. ASP originalmente funcionava em multithreading e E / S síncrona. A primeira opção apresenta ótimo desempenho quando os serviços exigem trocas muito intensas, mas às custas de alguma complicação do código. Nas versões mais recentes dos produtos, essas diferenças são eliminadas, no Node.js e no ASP.NET, o padrão async \ await é usado.
JS cresceu muito durante seu desenvolvimento, mas ainda permanece uma linguagem sem forte tipagem e perde para C #, que foi originalmente desenvolvido sob a influência direta de C ++, que desde os primeiros dias tinha forte tipagem e OOP. A consequência disso é que o C # é mais poderoso e mais consistente e não requer complementos como o TS. Mas, por outro lado, JS, devido à sua simplicidade, é mais requisitado na programação de microsserviços, que não requerem recursos complexos de C #.
Além das diferenças nas linguagens de programação utilizadas, essas plataformas possuem ideologias diferentes. No ASP.NET, muito é pré-definido, oferece tudo pronto, a começar pela estrutura do arquivo, ao começar a trabalhar com Node.js, você tem que escolher tudo sozinho, o que dá muita flexibilidade, mas complica o desenvolvimento. Mas o ASP.NET tem ferramentas poderosas de depuração, teste e refatoração.
A única coisa que o ASP.NET é seriamente inferior ao Node.js é a facilidade de implantação. O Node só precisa de um mecanismo e um proxy ou Docker. A plataforma pode ser configurada por você ou você pode obter uma imagem VPS pronta, que está disponível em quase todos os provedores de hospedagem. Para ASP, apesar da plataforma cruzada, nem tudo é tão fácil, e imagens prontas para servidores estão disponíveis apenas para os maiores jogadores do nível Azure.
O JavaScript é realmente necessário?
O Node.js foi criado como um tempo de execução para JS porque é uma linguagem de programação simples e acessível que pode implementar facilmente vários scripts simultâneos para comunicação de aplicativo da web bidirecional entre um navegador e um servidor. ASP.NET também foi criado para escrever aplicativos da web, apenas usando outros métodos. O mesmo Deno consiste em várias camadas acima da máquina virtual, que trabalha diretamente com os recursos do servidor. Mas não é necessário usar wrappers complexos de linguagens de programação que não são executadas diretamente no servidor e requerem máquinas virtuais.
Vai
Em 2007, os engenheiros da empresa decidiram que o C ++ não atendia às realidades atuais da tecnologia da computação. Eram necessárias ferramentas de paralelização eficientes, aproveitando os recursos de processadores multicore e sistemas distribuídos, um coletor de lixo automático e algumas simplificações para melhor legibilidade do código e facilidade de trabalho com tipos.
O objetivo dos desenvolvedores não era criar uma “versão melhor do C ++”, mas tornar a nova linguagem mais compreensível com base em sua experiência de programação. Go foi anunciado publicamente em 2009 e rapidamente alcançou quase as 10 principais linguagens de programação (13º no início de 2012). O próprio Raymond Dahl elogiou em expressões como: "Por que Node.js, se existe uma linguagem tão bonita como Go?". Mas a novidade passou e a linguagem foi quase esquecida até que se descobriu que suas ferramentas de paralelização eram adequadas para o desenvolvimento de microsserviços em aplicativos da web. Isso devolveu o idioma à sua popularidade anterior.
Diversos frameworks web foram escritos para Go, embora não seja necessário utilizá-los, pois já vem com todas as funcionalidades necessárias para a programação de aplicações web. Deno foi originalmente escrito em Go.
Rubi
Comparado com o mesmo Go, este não é o idioma mais novo, ele foi lançado em 1995. Ao contrário de Go, foi desenvolvido por um entusiasta solitário, Yukihiro Matsumoto, que estava ansioso para criar uma linguagem interpretada orientada a objetos que fosse melhor do que Pyton. O idioma não ganhou popularidade imediatamente, até porque nos primeiros anos sua documentação era apenas em japonês. Livros em inglês não foram publicados até o início dos anos 2000, e o reconhecimento veio com o lançamento da estrutura da web Ruby on Rails em 2005, que rapidamente se tornou popular, especialmente quando a Apple anunciou em 2007 que seria lançado com o Mac OS X 10.5. .. .
Como acontece com todas as linguagens interpretadas, a velocidade do Ruby era relativamente lenta, o que afetava muito o desempenho dos aplicativos da web escritos em Ruby on Rails. Sabendo desse problema, o autor começou a desenvolver uma versão da linguagem que perderia a compatibilidade com as versões anteriores, mas rodaria muito mais rápido, o que ele fez em 2009. A velocidade aumentou significativamente e é igual a aplicativos da web executados em .NET e JVM. Graças a isso, a popularidade da estrutura disparou. Em 2018, o autor do Ruby lançou a versão 2.6, que implementa a compilação dinâmica, o que acelera ainda mais o desempenho dos aplicativos.
Até agora, a linguagem Ruby está intimamente associada ao framework Ruby on Rails.
Elixir
Erlang é outra linguagem de programação criada por uma grande empresa. Desta vez, os suecos da Ericsson deram o seu melhor. Em 1986, ninguém pensava em desenvolver aplicações web, a Internet ainda estava no projeto, e a linguagem foi criada para rodar sistemas em tempo real. Por muito tempo o Erlang foi praticamente desconhecido fora da empresa, que o utilizava para suas necessidades internas, até que em 1998 a administração decidiu deixar de suportar sua própria linguagem e proibiu seu uso, obrigando os desenvolvedores a migrarem para o Java. Isso fez com que a linguagem fosse lançada sob uma licença aberta e distribuída fora da empresa que a desenvolveu. Por muito tempo, ele interessou apenas a um pequeno círculo de cientistas, até que se descobriu que seu conceito é adequado para o desenvolvimento de arquitetura de multiprocessadores.
Em 2012, Jose Walim, um dos desenvolvedores de Ruby on Rails, teve a ideia de criar uma linguagem de programação para sistemas de alta carga e grandes sites. Como resultado, foi desenvolvido o Elixir , uma linguagem de programação funcional compilada em bytecode para a máquina virtual Erlang (BEAM). Por ser uma linguagem baseada no Erlang, que foi desenvolvido para a programação de equipamentos de comunicação, o Elixir recebeu propriedades únicas: tolerância a falhas, substituição de hot code(alterar ou reverter o código de um programa em execução, sem reiniciá-lo) e a capacidade de trabalhar em tempo real. Essas propriedades permitem que você crie sistemas confiáveis de alta carga que suportam escalonamento horizontal e vertical, operando de 5 a 10 vezes mais rápido do que aplicativos semelhantes escritos em linguagens interpretadas (PHP, Ruby, Python). O local de trabalho do criador influenciou o fato de que a linguagem usa sintaxe semelhante a Ruby, e é fácil de aprender para quem usa Ruby on Rails.
Elixir é usado atualmente por empresas conhecidas como Discord, Square Enix, PepsiCo e Sketch.
E se, afinal, JavaScript?
Mas se é impraticável dominar uma nova linguagem de programação, como arrastar todo o Node para o servidor? Você pode olhar para outros tempos de execução JS.
RingoJS é uma plataforma multithread construída na JVM e otimizada para execução em servidores. O motor Mozilla Rhino, que tem uma história impressionante, é usado para interpretar o código JS. Começou a ser desenvolvido em 1997, na época da Netscape, posteriormente o projeto foi transferido para a Fundação Mozilla e postado em código aberto.
Os aplicativos RingoJS podem ser implantados em qualquer plataforma Linux, até o Raspberry Pi, ou no topo de plataformas de nuvem como o Google App Engine. RingoJS é um sistema modular baseado em CommonJS, você pode até usar alguns módulos do Node.js. Além disso, o mecanismo Ringo permite que você integre bibliotecas escritas em Java.
PurpleJS é outra estrutura JS simples que é executada na JVM. Nashorn (também um rinoceronte) desenvolvido pela Oracle é usado como o mecanismo JS. Isso não quer dizer que esta seja uma substituição completa para o Node, porque a estrutura não usa o modo assíncrono e o Nashorn não tem suporte para CommonJS, mas é muito leve e não requer reiniciar o serviço após alterar o código.
Vert.xNão é mais uma estrutura, mas um conjunto multilíngue de ferramentas que permite criar aplicativos da web reativos totalmente assíncronos, microsserviços e utilitários de rede que são executados na JVM. As linguagens suportadas não se limitam a Java e JS, exceto por elas você pode escrever aplicativos em Groovy, Ruby, Scala e Kotlin, um sistema modular com um repositório centralizado é suportado, Vert.x é facilmente expansível e escalonável.
É engraçado que o projeto primeiro foi chamado de Node.x, depois foi renomeado para evitar problemas jurídicos, porque os objetivos ao criar eram os mesmos do Node.js, e Tim Fox (criador do Vert.x) disse que era inspirado no sucesso de Dali e “Eu queria fazer Node.js em JVM”.
Se as alternativas não são impressionantes e node.js continua sendo seu amor
node.js