Sou novo nesse tipo de coisa, mas ultimamente tenho ouvido muito sobre o quão bom o Node.js é. Considerando o quanto eu amo trabalhar com jQuery e JavaScript em geral, não posso deixar de pensar em como decidir quando usar o Node.js. O aplicativo da web que tenho em mente é algo como o Bitly - pega algum conteúdo e o arquiva.
De toda a lição de casa que venho fazendo nos últimos dias, obtive as seguintes informações. Node.js
- é uma ferramenta de linha de comando que pode ser executada como um servidor Web comum e permite que você execute programas JavaScript
- utiliza o ótimo mecanismo JavaScript V8
- é muito bom quando você precisa fazer várias coisas ao mesmo tempo
- é baseado em eventos, para que todo o maravilhoso material semelhante ao Ajax possa ser feito no lado do servidor
- nos permite compartilhar código entre o navegador e o back-end
- vamos conversar com o MySQL
Algumas das fontes que encontrei são:
- Mergulhando no Node.js - Introdução e Instalação
- Entendendo o NodeJS
- Nó por exemplo ( Archive.is )
- Vamos criar um aplicativo Web: NodePad
Considerando que o Node.js pode ser executado quase que imediatamente nas instâncias EC2 da Amazon , estou tentando entender que tipo de problemas exigem o Node.js, em oposição a qualquer um dos poderosos reis do mercado, como PHP , Python e Ruby . Entendo que realmente depende da experiência que se tem em um idioma, mas minha pergunta se enquadra mais na categoria geral de: Quando usar uma estrutura específica e para que tipo de problemas ela é particularmente adequada?
Respostas:
Você fez um ótimo trabalho de resumir o que é incrível no Node.js. Minha impressão é que o Node.js é especialmente adequado para aplicativos em que você deseja manter uma conexão persistente do navegador com o servidor. Usando uma técnica conhecida como "pesquisa longa" , você pode escrever um aplicativo que envia atualizações para o usuário em tempo real. Fazer pesquisas longas em muitos dos gigantes da web, como Ruby on Rails ou Django , criaria uma carga imensa no servidor, porque cada cliente ativo consome um processo de servidor. Essa situação equivale a um ataque de tarpit . Quando você usa algo como Node.js, o servidor não precisa manter threads separados para cada conexão aberta.
Isso significa que você pode criar um aplicativo de bate-papo baseado no navegador no Node.js. que consome quase nenhum recurso do sistema para atender a muitos clientes. Sempre que você desejar fazer esse tipo de pesquisa longa, o Node.js é uma ótima opção.
Vale ressaltar que Ruby e Python têm ferramentas para fazer esse tipo de coisa ( eventmachine e twisted , respectivamente), mas que o Node.js faz isso excepcionalmente bem e desde o início. O JavaScript está excepcionalmente bem situado em um modelo de simultaneidade baseado em retorno de chamada e é excelente aqui. Além disso, ser capaz de serializar e desserializar com JSON nativo para o cliente e o servidor é bastante bacana.
Estou ansioso para ler outras respostas aqui, esta é uma pergunta fantástica.
Vale ressaltar que o Node.js também é ótimo para situações nas quais você reutilizará muito código na lacuna cliente / servidor. A estrutura do Meteor facilita muito isso, e muitas pessoas sugerem que esse pode ser o futuro do desenvolvimento da web. Por experiência, posso dizer que é muito divertido escrever código no Meteor, e grande parte disso é gastar menos tempo pensando em como você vai reestruturar seus dados, para que o código executado no navegador possa facilmente manipulá-lo e devolvê-lo.
Aqui está um artigo sobre Pyramid e long polling, que se mostra muito fácil de configurar com uma pequena ajuda do gevent: TicTacToe e Long Polling with Pyramid .
fonte
Acredito que o Node.js é mais adequado para aplicativos em tempo real: jogos online, ferramentas de colaboração, salas de bate-papo ou qualquer coisa em que o que um usuário (ou robô? Ou sensor?) Faz com o aplicativo precisa ser visto imediatamente por outros usuários, sem uma atualização de página.
Devo mencionar também que o Socket.IO em combinação com o Node.js reduzirá sua latência em tempo real ainda mais do que é possível com pesquisas longas. O Socket.IO voltará à sondagem longa como um cenário de pior caso e, em vez disso, usará soquetes da Web ou até Flash, se estiverem disponíveis.
Mas também devo mencionar que praticamente qualquer situação em que o código possa bloquear devido a threads pode ser melhor abordada com o Node.js. Ou qualquer situação em que você precise que o aplicativo seja orientado a eventos.
Além disso, Ryan Dahl disse em uma palestra que certa vez participei que os benchmarks do Node.js rivalizam muito com o Nginx em relação a solicitações HTTP antigas e regulares. Portanto, se criarmos com o Node.js, podemos servir nossos recursos normais com bastante eficiência e, quando precisarmos do material orientado a eventos, ele estará pronto para lidar com isso.
Além disso, é tudo JavaScript o tempo todo. Lingua Franca em toda a pilha.
fonte
.js
arquivos diferentes de alguma forma. Verde para o lado do cliente, azul para o lado do servidor. Eu continuo me perdendo.Razões para usar o NodeJS:
Ele executa Javascript, para que você possa usar o mesmo idioma no servidor e no cliente e até compartilhar algum código entre eles (por exemplo, para validação de formulário ou para renderizar visualizações em cada extremidade).
O sistema orientado a eventos de thread único é rápido, mesmo ao lidar com muitas solicitações de uma só vez, e também simples, comparado às estruturas Java ou ROR tradicionais de vários threads .
O crescente conjunto de pacotes acessíveis por meio do NPM , incluindo bibliotecas / módulos do cliente e do servidor, além de ferramentas de linha de comando para o desenvolvimento da Web. A maioria deles está convenientemente hospedada no github, onde às vezes você pode relatar um problema e corrigi-lo em poucas horas! É bom ter tudo sob o mesmo teto, com relatórios de problemas padronizados e bifurcação fácil.
Tornou-se o ambiente padrão padrão para executar ferramentas relacionadas ao Javascript e outras ferramentas relacionadas à Web , incluindo executores de tarefas, minificadores, embelezadores, linters, pré-processadores, empacotadores e processadores de análise.
Parece bastante adequado para prototipagem, desenvolvimento ágil e rápida iteração do produto .
Razões para não usar o NodeJS:
Ele executa Javascript, que não possui verificação de tipo em tempo de compilação. Para sistemas grandes e complexos de segurança crítica , ou projetos, incluindo a colaboração entre diferentes organizações, uma linguagem que incentiva interfaces contratuais e fornece verificação estática de tipo pode poupar algum tempo de depuração (e explosões ) a longo prazo. (Embora a JVM esteja bloqueada
null
, use Haskell para seus reatores nucleares.)Além disso, muitos dos pacotes no NPM são um pouco brutos e ainda estão em rápido desenvolvimento. Algumas bibliotecas para estruturas mais antigas passaram por uma década de testes e correções de bugs e agora são muito estáveis . O Npmjs.org não possui um mecanismo para classificar pacotes , o que levou a uma proliferação de pacotes fazendo mais ou menos a mesma coisa, dos quais uma grande porcentagem não é mais mantida.
Inferno aninhado de retorno de chamada. (Claro que existem 20 soluções diferentes para isso ...)
O crescente conjunto de pacotes pode fazer com que um projeto do NodeJS pareça radicalmente diferente do seguinte. Há uma grande diversidade de implementações devido ao grande número de opções disponíveis (por exemplo, Express / Sails.js / Meteor / Derby ). Às vezes, isso pode dificultar a entrada de um novo desenvolvedor em um projeto do Node. Compare isso com um desenvolvedor do Rails que ingressa em um projeto existente: ele deve se familiarizar com o aplicativo rapidamente, porque todos os aplicativos do Rails são incentivados a usar uma estrutura semelhante .
Lidar com arquivos pode ser um pouco trabalhoso. Coisas triviais em outros idiomas, como ler uma linha de um arquivo de texto, são estranhas o suficiente para fazer com o Node.js, pois há uma pergunta do StackOverflow sobre isso com mais de 80 upvotes. Não há uma maneira simples de ler um registro de cada vez em um arquivo CSV . Etc.
Eu amo o NodeJS, é rápido, selvagem e divertido, mas estou preocupado que ele tenha pouco interesse na correção comprovável. Vamos torcer para que possamos eventualmente mesclar o melhor dos dois mundos. Estou ansioso para ver o que substituirá o Node no futuro ... :)
fonte
npm search
enpm show
vai mostrar a data da última liberação de um pacote.Para abreviar:
O Node.js é adequado para aplicativos que possuem muitas conexões simultâneas e cada solicitação precisa apenas de muito poucos ciclos de CPU, porque o loop de eventos (com todos os outros clientes) é bloqueado durante a execução de uma função.
Um bom artigo sobre o ciclo de eventos em Node.js é de Mixu blog de tecnologia: Entendendo o ciclo de eventos node.js .
fonte
Eu tenho um exemplo do mundo real em que usei o Node.js. A empresa em que trabalho conseguiu um cliente que queria ter um site HTML estático simples. Este site destina-se à venda de um item usando o PayPal e o cliente também queria ter um contador que mostre a quantidade de itens vendidos. Espera-se que o cliente tenha uma enorme quantidade de visitantes neste site. Decidi fazer o contador usando o Node.js e a estrutura Express.js .
O aplicativo Node.js era simples. Obtenha o valor dos itens vendidos em um banco de dados Redis , aumente o contador quando o item for vendido e sirva o valor do contador aos usuários por meio da API .
Algumas razões pelas quais eu escolhi usar o Node.js nesse caso
Nesse caso, o Node.js foi uma excelente escolha.
fonte
Os motivos mais importantes para iniciar seu próximo projeto usando o Node ...
O que esperar ...
Quem o usa?
fonte
async
/await
então agora podemos lançar um código de nó assíncrono muito mais limpo, que também suportatry
/catch
. Em 2016/17, os codificadores JS estão migrando para o ES6.Não há nada como o Silver Bullet. Tudo vem com algum custo associado a ele. É como se você come alimentos oleosos, comprometerá sua saúde e alimentos saudáveis não vêm com especiarias como alimentos oleosos. É uma escolha individual se eles querem saúde ou especiarias como em seus alimentos. Da mesma maneira que o Node.js considera ser usado em um cenário específico. Se o seu aplicativo não se encaixa nesse cenário, você não deve considerá-lo para o seu desenvolvimento. Estou apenas colocando o meu pensamento no mesmo:
Quando usar o Node.JS
Quando NÃO usar Node.JS
Consideração de escalabilidade com Node.JS
Alternativas ao Node.JS
Há outra opção para usar no lugar do Node.JS, no entanto, o Vert.x parece bastante promissor e possui muitos recursos adicionais, como poligotação e melhores considerações sobre escalabilidade.
fonte
fork
. Consulte stackoverflow.com/questions/9546225/… . O nó lida com vários núcleos muito bem com ocluster
módulo. nodejs.org/api/cluster.htmlOutra grande coisa que eu acho que ninguém mencionou sobre o Node.js. é a incrível comunidade, o sistema de gerenciamento de pacotes (npm) e a quantidade de módulos que você pode incluir, incluindo-os no seu arquivo package.json.
fonte
Minha peça: nodejs é excelente para criar sistemas em tempo real, como análises, aplicativos de bate-papo, APIs, servidores de anúncios, etc. Inferno, eu fiz meu primeiro aplicativo de bate-papo usando nodejs e socket.io em menos de 2 horas e durante a semana do exame!
Editar
Faz vários anos desde que comecei a usar o nodejs e o usei para criar várias coisas diferentes, incluindo servidores de arquivos estáticos, análises simples, aplicativos de bate-papo e muito mais. Esta é minha opinião sobre quando usar o nodejs
Quando usar
Ao criar um sistema que enfatize a concorrência e a velocidade.
Quando não usar
É um servidor da web muito versátil, para que você possa usá-lo onde quiser, mas provavelmente não nesses locais.
Tenha em mente que eu estou apenas dando uma olhada. Para servidores de arquivos estáticos, o apache é melhor principalmente porque está amplamente disponível. A comunidade nodejs ficou maior e mais madura ao longo dos anos e é seguro dizer que o nodejs pode ser usado em qualquer lugar, se você tiver sua própria opção de hospedagem.
fonte
Pode ser usado onde
No campo Mobile, as empresas no horário nobre confiaram no Node.js para suas soluções móveis. Confira por quê?
O LinkedIn é um usuário de destaque. Toda a sua pilha móvel é construída no Node.js. Eles deixaram de executar 15 servidores com 15 instâncias em cada máquina física, para apenas 4 instâncias - que podem lidar com o dobro do tráfego!
O eBay lançou o ql.io, uma linguagem de consulta na Web para APIs HTTP, que usa o Node.js como pilha de tempo de execução. Eles conseguiram ajustar uma estação de trabalho Ubuntu com qualidade de desenvolvedor para lidar com mais de 120.000 conexões ativas por processo node.js., com cada conexão consumindo cerca de 2kB de memória!
O Walmart reprojetou seu aplicativo móvel para usar o Node.js e empurrou seu processamento JavaScript para o servidor.
Leia mais em: http://www.pixelatingbits.com/a-closer-look-at-mobile-app-development-with-node-js/
fonte
Nó melhor para manipulação simultânea de solicitações -
Então, vamos começar com uma história. Nos últimos 2 anos, estou trabalhando em JavaScript e desenvolvendo front-end da Web e estou gostando. O pessoal do back-end nos fornece algumas APIs escritas em Java, python (não nos importamos) e simplesmente escrevemos uma chamada AJAX, obtemos nossos dados e adivinhem! acabamos. Mas, na realidade, não é tão fácil, se os dados que estamos obtendo não estão corretos ou se houver algum erro no servidor, nós travamos e precisamos entrar em contato com nossos funcionários por e-mail ou bate-papo (às vezes também no whatsApp :).) não é legal. E se nós escrevemos nossas APIs em JavaScript e as chamamos de nosso front end? Sim, isso é muito legal porque, se enfrentarmos algum problema na API, podemos investigar. Adivinha ! você pode fazer isso agora, como? - Nó está lá para você.
Ok, concordou que você pode escrever sua API em JavaScript, mas e se eu estiver bem com o problema acima. Você tem algum outro motivo para usar a API do nó para descanso?
então aqui está a mágica começa. Sim, tenho outros motivos para usar o nó nas nossas APIs.
Vamos voltar ao nosso sistema API de descanso tradicional, que se baseia na operação de bloqueio ou na segmentação. Suponha que ocorram duas solicitações simultâneas (r1 e r2), cada uma delas requer operação do banco de dados. Então, no sistema tradicional, o que acontecerá:
1. Modo de espera: Nosso servidor começa a atender a
r1
solicitação e aguarda a resposta da consulta. após a conclusãor1
, o servidor começa a servirr2
e o faz da mesma maneira. Portanto, esperar não é uma boa ideia, porque não temos muito tempo.2. Maneira Threading: Nosso servidor cria dois threads para ambas as solicitações
r1
er2
serve a seus propósitos depois de consultar o banco de dados, para esfriar rapidamente. então você tem que lidar com problemas do tipo deadlock. Portanto, é melhor do que esperar, mas ainda existem problemas.Agora, aqui está, como o nó fará isso:
3. Nodeway: quando a mesma solicitação simultânea entrar no nó, ele registrará um evento com seu retorno de chamada e seguirá em frente, não aguardará a resposta da consulta para uma
r1
solicitação específica. Portanto, quando a solicitação chegar, o loop de eventos do nó (sim, existe um loop de eventos). no nó que serve a esse propósito.) registre um evento com sua função de retorno de chamada e avance para atender àr2
solicitação e registre seu evento da mesma forma com seu retorno de chamada. Sempre que uma consulta termina, ela dispara seu evento correspondente e executa seu retorno de chamada até a conclusão sem ser interrompido.Portanto, sem espera, sem encadeamento, sem consumo de memória - sim, essa é uma maneira de servir a API de descanso.
fonte
Meu mais um motivo para escolher o Node.js para um novo projeto é:
Ser capaz de fazer puro desenvolvimento baseado em nuvem
Eu uso o Cloud9 IDE há algum tempo e agora não consigo imaginar sem ele, ele abrange todos os ciclos de vida de desenvolvimento. Tudo o que você precisa é de um navegador e pode codificar a qualquer momento e em qualquer lugar, em qualquer dispositivo. Você não precisa fazer o check-in do código em um computador (como em casa) e depois fazer o check-out em outro computador (como no local de trabalho).
Claro, talvez haja IDE baseado em nuvem para outros idiomas ou plataformas (o Cloud 9 IDE também está adicionando suporte para outros idiomas), mas usar o Cloud 9 para desenvolver o Node.js. é realmente uma ótima experiência para mim.
fonte
Mais uma coisa que o nó fornece é a capacidade de criar vários instantes v8 do nó usando o processo filho do nó ( childProcess.fork (), cada um exigindo 10mb de memória conforme os documentos) em tempo real, não afetando o processo principal que está executando o servidor. Portanto, descarregar um trabalho em segundo plano que exija uma enorme carga do servidor torna-se uma brincadeira de criança e podemos matá-los facilmente quando e quando necessário.
Eu tenho usado muito o nó e, na maioria dos aplicativos que criamos, exige conexões com o servidor ao mesmo tempo, portanto, um tráfego de rede pesado. Estruturas como Express.js e o novo Koajs (que removeu o inferno de retorno de chamada) tornaram o trabalho no nó ainda mais fácil.
fonte
Colocar amianto longjohns ...
Ontem meu título com Packt Publications, Programação Reativa com JavaScript . Não é realmente um título centrado no Node.js. os capítulos iniciais destinam-se a cobrir a teoria, e os capítulos posteriores pesados em código cobrem a prática. Como eu realmente não achei que seria apropriado deixar de fornecer aos servidores um servidor da web, o Node.js parecia de longe a escolha óbvia. O caso foi encerrado antes mesmo de ser aberto.
Eu poderia ter dado uma visão muito positiva da minha experiência com o Node.js. Em vez disso, fui honesto com os pontos positivos e negativos que encontrei.
Deixe-me incluir algumas citações relevantes aqui:
O Apêndice, que eu realmente não queria depois do crescente crescimento nos últimos capítulos e da conclusão, fala sobre o que eu consegui encontrar no ecossistema e forneceu uma solução alternativa para o literalismo idiota:
Trocando dois comentários em ordem:
fonte
Se seu aplicativo amarra principalmente APIs da Web ou outros canais io, fornece ou aceita uma interface do usuário, o node.js pode ser uma escolha justa para você, especialmente se você deseja extrair o máximo de escalabilidade ou, se seu idioma principal na vida é javascript (ou tipos de transpilers de javascript). Se você criar microsserviços, o node.js também estará bem. O Node.js também é adequado para qualquer projeto pequeno ou simples.
Seu principal ponto de venda é que permite que os front-end assumam a responsabilidade pelo material de back-end, em vez da divisão típica. Outro ponto de venda justificável é se sua força de trabalho é orientada a javascript para começar.
Além de um certo ponto, no entanto, você não pode escalar seu código sem hacks terríveis para forçar a modularidade, a legibilidade e o controle de fluxo. Porém, algumas pessoas gostam desses hacks, principalmente provenientes de um background javascript orientado a eventos, que parecem familiares ou perdoáveis.
Em particular, quando seu aplicativo precisa executar fluxos síncronos, você começa a sangrar por soluções incompletas que o tornam mais lento em termos de processo de desenvolvimento. Se você possui peças intensivas em computação em seu aplicativo, pise com cuidado (apenas) node.js. Talvez http://koajs.com/ ou outras novidades aliviem esses aspectos originalmente espinhosos, em comparação com quando eu originalmente usei o node.js ou escrevi isso.
fonte
Posso compartilhar alguns pontos onde e por que usar o nó js.
Desvantagens: -
Conclusão: - É melhor usar o Nodejs para aplicativos simples e em tempo real. Se você possui uma lógica de negócios muito grande e uma funcionalidade complexa, melhor não deve usar o nodejs. Se você deseja criar um aplicativo junto com o bate-papo e qualquer funcionalidade colaborativa .. o nó pode ser usado em partes específicas e deve permanecer com a sua tecnologia de conveniência.
fonte
O nó é ótimo para protótipos rápidos, mas eu nunca o usaria novamente para algo complexo. Passei 20 anos desenvolvendo um relacionamento com um compilador e com certeza sinto falta disso.
O nó é especialmente doloroso para manter o código que você não visita há algum tempo. Informações de tipo e detecção de erros em tempo de compilação são BOAS COISAS. Por que jogar tudo isso fora? Para quê? E, dang, quando algo vai para o sul, a pilha rastreia muitas vezes completamente inútil.
fonte