Devemos usar o Node.js em nossa aplicação?

A escolha da tecnologia backend é uma das decisões mais importantes que todo CEO e CTO deve tomar. Determina a rapidez com que um produto pode ser enviado ao mercado, qual é o custo total e qual será o tamanho da manutenção. O JavaScript tem se mostrado uma das linguagens de programação mais populares do lado do cliente e uma ferramenta de desenvolvimento da Web de front-end comumente usada. No entanto, ele também ganhou espaço em diferentes áreas de aplicação e em plataformas distintas, como o React Native, o Appcelerator Titanium, o Apache Cordova / PhoneGap, o NativeScript e o Node.js, o que é totalmente diferente de outras estruturas JavaScript comumente usadas. O Node.js é um ambiente de tempo de execução de aplicativo que permite gravar aplicativos do lado do servidor em Javascript. Graças ao seu modelo único de E/S, ele se destaca no tipo de situações escalonáveis e em tempo real que cada vez mais exigimos de nossos servidores. Também é leve, eficiente e a capacidade de usar Javascript em front-end e back-end abre novas possibilidades. Não é de surpreender que tantas grandes empresas o tenham aproveitado na produção, incluindo Walmart, Netflix, Medium, LinkedIn ou Groupon. Por que tantos grandes jogadores escolheram o Node.js para usar no back-end? Aqui estão os principais benefícios desse ambiente, mas também algumas desvantagens que você deve considerar antes de fazer a escolha. A decisão errada pode lhe custar dinheiro, então escolha sabiamente.

Quando usar o Node.js

Internet das Coisas (IoT)

Desde 2012, quando a popularidade da IoT(Internet of Things) aumentou drasticamente, o Node.js tornou-se uma das soluções preferidas para empresas e organizações que buscam desenvolver seus sistemas de IoT privados e públicos. A vantagem mais óbvia do Node.js como back-end para essas redes é sua capacidade de processar várias solicitações simultâneas e eventos emitidos por milhares ou até mesmo milhões de dispositivos na rede. A avalanche de solicitações e dados provenientes de dispositivos IoT não bloqueia os servidores Node.js graças à arquitetura orientada a eventos e ao processamento assíncrono adequado para operações pesadas de E / S na rede IoT. Isso torna o Node.js rápido como uma camada de aplicativo entre esses dispositivos e bancos de dados usados para armazenar dados originados deles. Além disso, os desenvolvedores de IoT que trabalham em cenários com uso intensivo de dados podem aproveitar os baixos requisitos de recursos do Node.js. Os requisitos de pouca memória permitem a fácil integração do Node.js como software em controladores de placa única, como o Arduino, amplamente usado para construir dispositivos digitais que compõem sistemas IoT. Finalmente, a comunidade Node tem sido uma das primeiras a adotar a tecnologia IoT, criando mais de 80 pacotes para controladores Arduino e vários pacotes para os dispositivos vestíveis Pebble e Fitbit amplamente usados em sistemas IoT.

Chats em Tempo Real

O Node.js fornece todas as funcionalidades básicas para criar chats em tempo real de qualquer complexidade. Em particular, o Node possui uma poderosa API de Eventos que facilita a criação de certos tipos de objetos (“emissores”) que periodicamente emitem eventos nomeados “escutados” pelos manipuladores de eventos. Graças a essa funcionalidade, o Node.js facilita a implementação de eventos do lado do servidor e notificações push amplamente usadas em mensagens instantâneas e outros aplicativos em tempo real. A arquitetura baseada em evento do nó também funciona bem com o protocolo WebSockets, que facilita uma troca rápida de mensagens entre o cliente e o servidor por meio de uma conexão aberta. Ao instalar as bibliotecas WebSockets no servidor e no lado do cliente, você pode implementar o sistema de mensagens em tempo real com menos sobrecarga e latência e transferência de dados mais rápida do que a maioria das outras soluções mais convencionais. No Node, você tem excelente suporte para WebSockets por meio de bibliotecas como socket.io, ws ou websocket-node, graças às quais você pode facilmente implementar bate-papos e aplicativos eficientes em tempo real. Com o socket.io, por exemplo, tudo o que você precisa fazer para criar um bate-papo ao vivo básico é instalar a biblioteca socket.io no servidor e no cliente e criar emissores de eventos e emissoras que enviarão mensagens pela conexão aberta do WebSockets. Essa funcionalidade básica pode ser obtida com apenas algumas linhas de código.

Aplicações Single-Page Complexas

O Node.js é perfeito para aplicativos de página única (SPAs), graças ao seu manuseio eficiente de chamadas assíncronas e cargas de trabalho de E/S pesadas características desses aplicativos. O loop de eventos do Node.js permite "atrasar" várias solicitações simultâneas do cliente, o que garante transições suaves entre visualizações e atualizações de dados contínuas. Além disso, o Node.js funciona bem com os SPAs acionados por dados, em que o servidor atua como um back-end que fornece dados para o cliente, enquanto o cliente faz toda a renderização de HTML. Além disso, o Node.js é bom para os SPAs porque está escrito na mesma linguagem (JavaScript) que muitos frameworks JavaScript populares (Ember, Meteor, React, Angular) usados na construção de SPAs. Como o Node.js e os navegadores usam JavaScript, há menos alternância de contexto entre eles, e os desenvolvedores podem usar os mesmos dados e estruturas de linguagem e abordagens modulares tanto no servidor quanto no lado do cliente. Isso resulta em um desenvolvimento mais rápido e melhor manutenção de seus SPAs. As vantagens acima do Node.js foram aproveitadas por SPAs famosos como Netflix, Linkedin e Medium, para citar alguns.

Ferramentas de colaboração em tempo real

Como no caso dos chats em tempo real, a arquitetura assíncrona e baseada em eventos do Node é uma ótima opção para aplicativos de colaboração. Nesses aplicativos, muitos eventos e solicitações de E/S ocorrem simultaneamente. Por exemplo, vários usuários podem editar o mesmo parágrafo, comentar, postar mensagens e anexar mídia. Alterações em uma parte do conteúdo podem ser aplicadas somente após uma cascata de eventos, onde cada etapa depende da anterior. A WebSockets e a Event API do Node garantirão que as pesadas operações de E / S realizadas por muitos usuários não deixem o servidor travado e que todos os eventos e dados do lado do servidor sejam enviados de volta ao cliente no prazo. Ao emitir notificações por push para o cliente, o Node.js também atualizará instantaneamente o ambiente de colaboração para que todos os usuários tenham uma representação única e coerente do aplicativo. Esta é precisamente a razão pela qual a equipe do aplicativo de gerenciamento de projetos Trello usa a pilha Node.js. A equipe de engenharia do Trello decidiu que o Node.js seria ótimo para propagar instantaneamente muitas atualizações e manter muitas conexões abertas, graças à sua arquitetura orientada a eventos e sem bloqueio. Entre outros aplicativos de colaboração em tempo real construídos sobre o Node.js, devemos mencionar também o Yammer, um serviço de rede social freemium que facilita a comunicação privada nas empresas.

Aplicativos de streaming

Ao contrário dos aplicativos de servidor remoto, no streaming de aplicativos, o programa é executado na máquina local do usuário final. O streaming de aplicativos permite o download de partes do aplicativo sob demanda sem sobrecarregar o servidor e o computador local. Inicialmente, somente algumas partes do aplicativo necessárias são baixadas, enquanto o restante pode ser baixado em segundo plano, se necessário. Quando o aplicativo é completamente baixado, ele pode funcionar sem nenhuma conexão de rede. Caso você queira salvar alguns dados em sua conta, o aplicativo pode iniciar solicitações do servidor. Da mesma forma, os eventos do servidor podem atualizar seu aplicativo local sem muita sobrecarga de tráfego de rede. O Node.js é excelente para o desenvolvimento de tais aplicativos de streaming, graças à sua API de fluxo nativa. Em particular, o Node.js tem uma interface de fluxos legíveis e graváveis que podem ser processados e monitorados de maneira muito eficiente. As instâncias de fluxo são basicamente canais Unix que permitem transmitir partes do código executável do aplicativo para a máquina local, mantendo uma conexão aberta para novos componentes para download sob demanda. Os fluxos permitem que os usuários canalizem solicitações entre si e transmitam dados diretamente para seu destino final. Como bônus, os fluxos não exigem armazenamento em cache e dados temporários, apenas uma conexão aberta para transmitir dados de aplicativos de um local para outro.

Arquitetura de microsserviços

O Node.js é uma excelente solução para o desenvolvimento de microsserviços e a criação de APIs fáceis de usar para conectá-los. Em particular, o repositório Node.js possui estruturas Express e Koa, que facilitam a montagem de várias instâncias do servidor para cada microsserviço e projetam endereços de roteamento para elas. O Node.js com o Express permite a criação de módulos altamente flexíveis, responsáveis por partes específicas da sua aplicação. Além disso, o Node.js pode ser facilmente integrado ao Docker e permitirá que você encapsule microsserviços em contêineres herméticos para evitar conflitos entre os ambientes de desenvolvimento de aplicativos usados em cada um deles. O uso do Node.js para microsserviços também se beneficia dos requisitos leves do Node. O Node.js com microservices reduz significativamente o tempo de implementação do aplicativo e aprimora a eficiência, a capacidade de manutenção e a escalabilidade de seus aplicativos. A arquitetura de microsserviços também ajuda a gerenciar a divisão do trabalho em suas equipes de engenharia de maneira eficiente, permitindo que eles trabalhem em tarefas específicas sem afetar outras partes da sua aplicação. Esses benefícios foram alavancados com sucesso pelo PayPal, o sistema de pagamento on-line líder mundial, que usa o Node.js para alimentar sua arquitetura de microsserviços desde 2013. O PayPal modularizou sua pilha de aplicativos e dividiu o processo de desenvolvimento em muitos microsserviços e, assim, organizou suas equipes para trabalhar neles de forma mais eficiente. O PayPal conseguiu dimensionar o Node.js para que várias equipes pudessem trabalhar no mesmo projeto. Os resultados dessa transição foram impressionantes. O aplicativo Node.js do PayPal pode ser criado duas vezes mais rápido e com menos pessoas. A empresa conseguiu reduzir sua base de código e melhorar o desempenho, onde um aplicativo Node de núcleo único poderia lidar com o dobro de mais rps (solicitações por segundo) do que 5 aplicativos Java usados anteriormente pelo PayPal.

Prós de usar o Node.js para desenvolvimento de back-end

Fácil de aprender

De acordo com o User Survey 2016 do Node.js, o Javascript é uma das linguagens de programação mais populares para o desenvolvimento de front-end. Quase todos os desenvolvedores de front-end estão familiarizados com essa linguagem universal. Portanto, é muito mais fácil para eles mudar para o uso do Node.js no back-end. Requer menos esforço e menos tempo para aprender e trabalhar, mesmo para um programador júnior de Javascript.

Liberdade na construção de aplicativos

Enquanto o Ruby on Rails é uma estrutura que impõe regras e diretrizes de desenvolvimento de software de uma maneira particular, o Node.js oferece muito mais espaço e liberdade para fazer do seu próprio jeito. O Node.js é completamente não publicado, o que significa que você começa a construir tudo do zero. Pode executar tarefas básicas, mas oferece apenas o mínimo de uma nova instalação, tornando-a menos restrita.

Comunidade ativa

A comunidade Node.js é um grupo muito ativo e vibrante de desenvolvedores que contribuem para a melhoria constante do Node.js. Graças à cooperação de programadores de JavaScript e sua contribuição para a comunidade, você tem acesso a uma tonelada de soluções prontas, códigos no Github e muito mais possibilidades. Mesmo assim, ainda está em um estágio relativamente inicial de desenvolvimento, a comunidade está evoluindo dinamicamente e seus membros se esforçam para fornecer soluções melhores e confiáveis aos outros.

Manipulação de solicitação simultânea

O Node.js fornece o sistema IO sem bloqueio que permite processar várias solicitações simultaneamente. O sistema faz o processamento de solicitações simultâneas muito melhor do que em outras linguagens como Ruby ou Python. As solicitações de entrada são enfileiradas e executadas sequencialmente de maneira rápida. Com efeito, seu aplicativo ocupará muito menos RAM do sistema, atingirá altos níveis de escalabilidade e, em um resultado, terá um desempenho mais rápido.

Solução rápida do lado do servidor

Quando pensamos sobre os pontos fortes do Node.js, a primeira coisa que vem à mente é a sua inovadora aplicação de programação assíncrona e baseada em eventos e E/S sem bloqueio, maximizando o uso de uma única CPU e memória de computador. Graças a essa arquitetura, os servidores Node.js podem processar mais solicitações simultâneas do que os servidores multiencadeados convencionais. O loop de eventos do Node.js, que não bloqueia a execução do programa sob fluxo de trabalho pesado de E / S, melhora o desempenho do tempo de execução, tornando o Node uma das soluções mais rápidas do lado do servidor.

Um idioma no front e no back-end

O Node.js é escrito em Javascript, uma linguagem de programação que domina o desenvolvimento de front-end. Algumas das estruturas front-end mais populares, como Ember, React e Angular, aproveitam o poder e a flexibilidade do JS para criar aplicativos dinâmicos da Web 2.0. Com o Node.js instalado no lado do servidor, os desenvolvedores podem usar a mesma linguagem de programação na pilha da web. A mesma linguagem no front-end e no back-end significa que você precisa de uma equipe menor e mais eficiente, que pode se comunicar melhor e, como resultado, entregar as tarefas muito mais rapidamente.

Solução escalonável

O Node.js é uma solução muito escalável também. Clusters e trabalhadores de nós são abstrações que podem gerar processos Node.js adicionais, dependendo da carga de trabalho de seu aplicativo da web. Limitado apenas pelo número de CPUs à sua disposição, você pode dimensionar facilmente seus aplicativos do Node para soluções corporativas totalmente funcionais.

Empresas que usaram o Node.js na produção

O Node.js tem inúmeras vantagens sobre outras tecnologias e, provavelmente, por essa razão, muitos grandes players passaram a usar o Node.js em seus aplicativos. Quais são essas empresas famosas que confiaram no Node.js na criação de seus aplicativos? Nós temos alguns exemplos de alto perfil.

Netflix

A Netflix é o principal fornecedor mundial de mídia de streaming e vídeo sob demanda. É uma plataforma orientada por dados que usa uma enorme quantidade de testes A / B para criar uma experiência avançada para seus 93 milhões de assinantes em todo o mundo. Um grande número de pacotes exclusivos a cada ciclo de push cria um problema de dependências condicionais e escalabilidade de aplicativos. É por isso que a empresa decidiu aproveitar o leve e rápido Node.js. Um dos resultados mais importantes disso foi uma redução de 70% no tempo de inicialização.

PayPal

O PayPal, um sistema de pagamentos on-line mundial, também mudou seu desenvolvimento de backend de Java para JavaScript e Node.js. Antes, as equipes de engenharia da empresa estavam divididas entre as que codificam para o navegador e as que codificam para a camada de aplicativos, e não funcionavam perfeitamente. Então, engenheiros de pilha completa vieram em socorro, mas esse modelo também não era ideal. A adoção do Node.js resolveu seus problemas, pois permitiu escrever o navegador e os aplicativos do servidor na mesma linguagem de programação - JavaScript. Como resultado, a equipe unificada é capaz de entender os problemas em ambas as extremidades e depois reagir de forma mais eficaz às necessidades dos clientes.

LinkedIn

O LinkedIn, o maior serviço de rede social orientado para negócios e empregos do mundo, também confiou no Node.js e, no ano passado, transferiu o back-end de aplicativo móvel de Ruby on Rails para Node.js. Embora naquela época ainda fosse um ambiente muito imaturo, provou ser uma jogada inteligente para a empresa. O novo aplicativo é duas a dez vezes mais rápido que seu antecessor e também é extremamente leve. Além disso, o desenvolvimento foi bastante rápido.

Walmart

O Walmart é o maior varejista do mundo e está avançando no mercado de varejo on-line. O gigante saltou no movimento de trabalhar com o Node.js - uma tecnologia relativamente nova e muito moderna, apesar do risco envolvido em tal movimento. A empresa reformulou o aplicativo móvel para fornecer recursos sofisticados no lado do cliente. O Walmart apreciou especialmente a famosa E / S assíncrona do Node.js e seus modelos de loop de evento single-threaded que podem lidar eficientemente com solicitações simultâneas.

Uber

A Uber, uma plataforma que conecta motoristas a clientes que precisam de serviços de transporte (e agora também entrega de alimentos), alavancam muitas ferramentas e linguagens de programação na engenharia de seus aplicativos. A pilha de tecnologia do Uber está evoluindo constantemente e, desde então, introduziu novas tecnologias que se mostraram mais eficientes em determinadas áreas. Dito isso, o Node.js ainda é uma das engrenagens cruciais na operação da empresa, pois permite o aumento de escala de acordo com a crescente demanda por seus serviços.

Groupon

O Groupon, um popular mercado de transações on-line que opera em muitos países do mundo, decidiu reconstruir toda a sua camada da Web sobre o Node.js. A motivação inicial foi o fato de que a pilha que eles estavam usando anteriormente se tornou difícil de manter. Especialmente quando, como resultado de suas inúmeras aquisições, eles acabaram com um monte de outras pilhas para gerenciar em diferentes partes do mundo. Esses eventos levaram a empresa a unificar o desenvolvimento em todas as suas plataformas. Em um ano, eles mudaram para o Node.js, tornando-se uma das maiores implantações de produção do Node.js em todo o mundo.

Ebay

A Ebay, uma empresa multinacional de comércio eletrônico, sempre esteve aberta a novas tecnologias. A empresa optou pelo Node.js por dois motivos principais: eles precisavam de um aplicativo o mais rápido possível para manter conexões ativas com o servidor e uma solução que pudesse orquestrar um grande número de serviços específicos do eBay que exibissem informações na página. O Node.js parecia ser um ajuste perfeito.

NASA

Sim está certo. A NASA também usa o Node.js. A tecnologia é de uma importância muito maior do que em outras aplicações, porque ela realmente salva vidas, mantendo os astronautas seguros durante suas perigosas expedições espaciais. Depois de um acidente quando um dos astronautas quase morreu por causa dos dados ineficazes hospedados em muitos locais, a NASA enfrentou o desafio de mover os dados relacionados aos trajes espaciais de EVA para um banco de dados de nuvem a fim de reduzir os tempos de acesso. O novo sistema baseado no Node.js diminuiu o número de etapas no processo de 28 para 7.

Olhe para o futuro

Os exemplos mencionados acima são apenas a ponta do iceberg de todas as empresas que adotaram o Node.js em produção. Existem muitos outros grandes jogadores usando o Node.js, por exemplo Microsoft, Google, Yahoo, Mozilla ou Github. A tecnologia cria inúmeras possibilidades de desenvolvimento e estamos ansiosos para ver cada vez mais novos aplicativos baseados em Node.js conquistarem o mercado.

Quando você não deve usar o Node.js

Embora o Node.js seja - em muitos casos - a combinação perfeita para a criação de aplicativos, ainda existem alguns casos de uso incorretos quando você não deve considerar usá-lo. A primeira coisa que me vem à mente são aplicativos de computação pesada. O Node.js é baseado em um modelo de E/S sem bloqueio orientado a eventos e usa apenas um único núcleo de CPU. Operações pesadas com CPU apenas bloquearão as solicitações recebidas, tornando inútil a maior vantagem do Node.js. Portanto, se você considerar a possibilidade de criar um software com muitos processadores, experimente uma tecnologia diferente e mais adequada que lhe proporcione melhores resultados. Há mais coisas a considerar antes de começar com o Node.js. Muitos pacotes para aplicativos Node.js estão disponíveis em npm. A comunidade é vibrante, a tecnologia está amadurecendo e o npm é o maior repositório disponível no momento. No entanto, os pacotes variam em sua qualidade. Às vezes, você ainda pode encontrar problemas com pacotes suportados apenas por usuários individuais e não mantidos adequadamente; por exemplo, ao conectar seu aplicativo Node ao sistema de banco de dados obscuro ou antigo. Por fim, usar o Node.js é desnecessário para aplicativos HTML ou CRUD simples nos quais você não precisa de uma API separada e todos os dados vêm diretamente do servidor. Seu aplicativo pode ser um pouco mais escalável, mas não espere mais tráfego no seu aplicativo apenas porque você usou o Node.js. Nesses casos, você deve se ater a estruturas comprovadas, como Ruby on Rails. Ambos Rails e Node podem alcançar os mesmos resultados. No entanto, existem situações diferentes em que cada uma funciona melhor. Com o Rails, você pode criar protótipos e mover-se rapidamente, quebrar coisas e obter um aplicativo crud em uma hora. O nó, por outro lado, requer mais recursos, mas é melhor dimensionado, funciona bem com tarefas em tempo real e é mais rápido em geral. Espero que as dicas acima ajudem você a escolher o melhor ambiente.

Contras de usar o Node.js para o seu back-end

API instável

Uma das maiores desvantagens do Node.js é que ele não tem consistência. A API do Node.js é alterada com frequência e as alterações costumam ser incompatíveis com versões anteriores. Quando isso acontece, os programadores são forçados a fazer alterações na base de código existente para torná-la compatível com a versão mais recente da API do Node.js.

Mais tempo de desenvolvimento

O fato de o Node.js não ser publicado também pode ser visto como uma desvantagem por parte de alguns desenvolvedores. O Ruby on Rails fornece muitas direções a partir de uma nova instalação e orienta você na maneira de fazer as coisas, mas com o Node.js você basicamente precisa escrever tudo do zero. Isso pode resultar em uma diminuição na produtividade, diminuindo seu trabalho. No entanto, se você cooperar com uma equipe experiente de programadores que desenvolveram internamente bons processos de desenvolvimento e manutenção de código, você não precisa se preocupar com eficiência.

Imaturidade de ferramentas

Mesmo assim, o Node.js principal é estável, muitos pacotes no registro npm (gerenciador de pacotes de nó pré-instalado que organiza a instalação e o gerenciamento de programas Node.js de terceiros) ainda são de baixa qualidade ou não foram documentados adequadamente . Como é principalmente um ecossistema de código aberto, inúmeras ferramentas não foram supervisionadas e, portanto, podem não ter a qualidade e falhar no cumprimento dos padrões de codificação. A estrutura do npm dificulta a localização de pacotes confiáveis. Portanto, você pode precisar de desenvolvedores mais experientes que possam encontrar ferramentas confiáveis.

Menos eficiente com operações intensivas de CPU

Ao mesmo tempo, no entanto, os modelos assíncrono e single-thread do Node.js possuem certas limitações. Sim, o Node é bom em lidar com vários eventos e solicitações simultâneas. No entanto, não é tão eficiente quando se trata de operações intensivas da CPU, como gerar gráficos ou redimensionar imagens. Felizmente, existe uma solução alternativa para criar uma nova fila de tarefas para gerenciar solicitações intensivas de CPU, embora ela exija a geração de mais funcionários e a introdução de novas camadas em seu aplicativo Node.js.

Quais são as alternativas para o Node.js

Ruby on Rails

Em poucas palavras, o Rails é um framework web completo com uma funcionalidade básica de desenvolvimento web fornecida desde o princípio. O framework é baseado em Ruby, uma poderosa e expressiva linguagem de programação desenvolvida por Yukihiro Matsumoto em 1993. O Rails é usado por sites e empresas populares como GitHub, Shopify, Airbnb e SoundCloud.

Prós do Ruby on Rails

Baseado nas melhores práticas de desenvolvimento da Web

Os criadores de RoR descrevem o Rails como uma estrutura opinativa porque implementam sua visão das melhores práticas e soluções de desenvolvimento da web. Como a RoR valoriza a convenção sobre a configuração, a estrutura é fornecida com todos os módulos e bibliotecas necessários. Todos eles são implementados com o paradigma MVC (Model-View-Controller) em mente.

Infraestrutura rica e bem desenvolvida

O Rails oferece uma solução de servidor da Web totalmente integrada (servidor da web da Puma) e um banco de dados do ActiveRecord que permite abstrair esquemas e modelos. Melhor ainda, os geradores de recursos do Rails - poderosos scripts que permitem montar rapidamente um aplicativo RoR criando a estrutura de diretórios, arquivos, controladores, roteadores, modelos de banco de dados e outras porcas e parafusos comuns de desenvolvimento da Web. Tudo isso torna o Rails adequado para prototipagem rápida e implementação de aplicativos da web.

Portabilidade Fácil entre Várias Plataformas de Banco de Dados

Da mesma forma, a comunidade de desenvolvedores da Web valoriza o Rails por sua fácil portabilidade em várias plataformas de banco de dados. Esse recurso é suportado pelas migrações de banco de dados do Rails. O Active Model que serve de base ao banco de dados padrão do Rails, o ActiveRecord, pode facilmente abstrair as diferenças entre vários back-ends de SQL. Em vez de escrever o esquema em SQL puro, as migrações permitem usar a sintaxe fácil do Ruby DSL para descrever as alterações nas tabelas. Como resultado, o RoR permite criar um esquema e modelos agnósticos para o banco de dados, simplificando a migração de aplicativos Rails em diferentes ambientes de banco de dados.

Contras de Ruby on Rails

Menos flexibilidade

Se o seu aplicativo tiver funcionalidades e demandas exclusivas, pode ser difícil ajustar uma estrutura opinativa como o Rails às necessidades do seu produto. Como o Rails impõe muita autoridade sobre o processo de desenvolvimento do aplicativo, você pode chegar ao ponto em que o ajuste do framework leva mais tempo do que construí-lo a partir do zero, ou usar um menos opinativo.

Queda no desempenho

Como o RoR oferece a maioria dos módulos prontos para uso, o framework é mais pesado e um pouco mais lento em desempenho que o Node.js. Também é menos eficiente que o Node.js no gerenciamento de solicitações simultâneas. A única solução para isso é usar instâncias de servidor adicionais, o que consome memória adicional.

Depuração lenta

Os quadros de pilha grande do Rails e as várias camadas de abstração podem dificultar a depuração de aplicativos RoR. Sua equipe de desenvolvimento precisa gastar mais tempo corrigindo erros e fazendo atualizações nos aplicativos. Isso pode desacelerar os ciclos de desenvolvimento, teste e produção.

Então, como fazer a escolha certa?

O Node.js é mais adequado para aplicativos dinâmicos com várias solicitações de servidor e para troca freqüente de dados entre o cliente e o servidor. Que tipo de aplicações são essas? Estes são aplicativos de mensagens instantâneas, como bate-papos e aplicativos colaborativos (desenho, videoconferência), coletivamente chamados de RTAs (Aplicativos em tempo real). A arquitetura Node.js baseada em eventos é perfeita para lidar com operações pesadas de E/O, solicitações de servidor e fluxo de dados nesses aplicativos. Pelo mesmo motivo, o Node.js é uma escolha preferencial para os Aplicativos de Página Única (SPAs) que envolvem processamento, renderização e processamento pesados do lado do cliente, e onde a principal função do back-end é fornecer uma API REST. Da mesma forma, sempre que o desempenho e a escalabilidade de aplicativos da Web são preocupantes, o Node.js leve e rápido supera o framework Rails. É por isso que empresas como o Linkedin começaram a usar o Node.js por motivos de desempenho e escalabilidade, mas o Ruby on Rails, por outro lado, apresenta um desempenho melhor do que o Node.js em aplicativos com uso intensivo de CPU. O Node.js é um ambiente de encadeamento único que não foi projetado para operações intensivas da CPU com gráficos, imagens e dados. Fazer cálculos em vastas matrizes de dados pode simplesmente bloquear todas as solicitações recebidas, tornando inútil a principal vantagem do Node.js. Se você considerar a construção de aplicações pesadas com CPU, o Rails é definitivamente uma opção melhor que o Node. O Rails também é melhor quando a velocidade do desenvolvimento é crítica. Com todos os módulos e geradores disponíveis, o Rails é muito poderoso no RAD (Rapid Application Development). Apenas em alguns comandos, você pode ter um protótipo totalmente funcional que pode ser alterado posteriormente com recursos adicionais. Os repositórios do Node.js também fornecem scripts geradores para acelerar o desenvolvimento, mas a prototipagem rápida é a filosofia do Rails. Portanto, ao escolher entre o Node e o Rails, você deve considerar uma velocidade de desenvolvimento, desempenho e escalabilidade de seu aplicativo e o tipo de casos de uso que ele aborda. Se sua necessidade é um rápido desenvolvimento de aplicativos com muita CPU, use o Rails. Ao contrário, escolha Node.js se estiver pensando em RTAs, SPAs e outras soluções pesadas de E / S. Espero que esta visão geral ajude você a fazer a escolha certa do seu ambiente de desenvolvimento web para o próximo projeto.

More