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:
Atenção: o Node.js e seu ecossistema são quentes - o suficiente para queimar você demais!
Quando eu era assistente de professor de matemática, uma das sugestões não óbvias que me disseram não era para dizer a um aluno que algo era "fácil". O motivo era óbvio em retrospecto: se você disser às pessoas que algo é fácil, alguém que não vê uma solução pode acabar se sentindo (ainda mais) estúpido, porque não apenas eles não conseguem resolver o problema, mas o problema eles são estúpidos demais para entender é fácil!
Existem truques que não apenas incomodam as pessoas vindas do Python / Django, que recarregam a fonte imediatamente se você mudar alguma coisa. Com o Node.js, o comportamento padrão é que, se você fizer uma alteração, a versão antiga continuará ativa até o final do tempo ou até você parar e reiniciar manualmente o servidor. Esse comportamento inadequado não apenas irrita os pythonistas; também irrita usuários nativos do Node.js. que fornecem várias soluções alternativas. A pergunta do StackOverflow “Recarregamento automático de arquivos no Node.js.” possui, no momento em que este artigo foi escrito, mais de 200 votos positivos e 19 respostas; uma edição direciona o usuário para um script de babá, supervisor de nó, com a página inicial em http://tinyurl.com/reactjs-node-supervisor. Esse problema oferece aos novos usuários a grande oportunidade de se sentirem estúpidos porque pensaram ter resolvido o problema, mas o antigo comportamento de buggy permanece completamente inalterado. E é fácil esquecer de devolver o servidor; Eu fiz isso várias vezes. E a mensagem que eu gostaria de passar é: “Não, você não é estúpido porque esse comportamento do Node.js mordeu suas costas; é que os designers do Node.js não viram motivo para fornecer um comportamento apropriado aqui. Tente lidar com isso, talvez usando uma pequena ajuda do supervisor de nó ou de outra solução, mas por favor, não vá embora sentindo que você é estúpido. Você não é o único com o problema; o problema está no comportamento padrão do Node.js. "
Esta seção, depois de algum debate, foi deixada, precisamente porque não quero dar uma impressão de "É fácil". Cortei minhas mãos repetidamente enquanto fazia as coisas funcionarem, e não quero amenizar as dificuldades e fazer com que você acredite que fazer com que o Node.js e seu ecossistema funcione bem é uma questão simples e se não é direta para você também , você não sabe o que está fazendo. Se você não encontrar dificuldades desagradáveis usando o Node.js, isso é maravilhoso. Se você o fizer, espero que você não se afaste, sentindo: "Eu sou estúpido - deve haver algo errado comigo." Você não é estúpido se tiver surpresas desagradáveis ao lidar com o Node.js. Não é você! É o Node.js e seu ecossistema!
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:
Outro banco de dados que parecia um ajuste perfeito e ainda pode ser resgatável é uma implementação do lado do servidor do armazenamento de valores-chave HTML5. Essa abordagem tem a principal vantagem de uma API que a maioria dos bons desenvolvedores de front-end entende bem o suficiente. Por outro lado, também é uma API que a maioria dos desenvolvedores de front-end não tão bons entende bem o suficiente. Mas com o pacote node-localstorage, enquanto o acesso à sintaxe do dicionário não é oferecido (você deseja usar localStorage.setItem (key, value) ou localStorage.getItem (key), não localStorage [key]), a semântica localStorage completa é implementada , incluindo uma cota padrão de 5 MB - POR QUE? Os desenvolvedores de JavaScript do servidor precisam ser protegidos de si mesmos?
Para recursos de banco de dados do lado do cliente, uma cota de 5 MB por site é realmente uma quantidade generosa e útil de espaço para permitir que os desenvolvedores trabalhem com ele. Você pode definir uma cota muito menor e ainda oferecer aos desenvolvedores uma melhoria imensurável em relação ao mancar junto com o gerenciamento de cookies. Um limite de 5 MB não se presta muito rapidamente ao processamento do Big Data no lado do cliente, mas há uma permissão bastante generosa que os desenvolvedores de recursos podem usar para fazer muito. Mas, por outro lado, 5 MB não é uma parcela particularmente grande da maioria dos discos comprados recentemente, o que significa que se você e um site discordam sobre o uso razoável do espaço em disco, ou se algum site é simplesmente hoggish, não custa realmente você e não corre o risco de um disco rígido inundado, a menos que o disco rígido já esteja cheio demais.
No entanto, pode-se dizer com delicadeza que, quando você é o único que escreve o código para o seu servidor, não precisa de nenhuma proteção adicional para tornar seu banco de dados mais do que um tamanho tolerável de 5 MB. A maioria dos desenvolvedores não precisará nem desejará ferramentas atuando como babá e protegendo-as de armazenar mais de 5 MB de dados do servidor. E a cota de 5 MB, que é um ato de equilíbrio de ouro no lado do cliente, é um pouco tola em um servidor Node.js. (E, para um banco de dados para vários usuários, como é abordado neste apêndice, pode-se apontar, um pouco doloroso, que não são 5 MB por conta de usuário, a menos que você crie um banco de dados separado em disco para cada conta de usuário; são 5 MB compartilhados entre todas as contas de usuário juntas, o que pode ser dolorosose você for viral!) A documentação afirma que a cota é personalizável, mas um email há uma semana para o desenvolvedor perguntando como alterar a cota não tem resposta, assim como a pergunta StackOverflow. A única resposta que consegui encontrar está na fonte do Github CoffeeScript, onde é listado como um segundo argumento opcional opcional para um construtor. Portanto, isso é fácil e você pode especificar uma cota igual ao tamanho de um disco ou partição. Mas, além de portar um recurso que não faz sentido, o autor da ferramenta falhou completamente em seguir uma convenção muito padrão de interpretar 0 como significando "ilimitado" para uma variável ou função em que um número inteiro deve especificar um limite máximo para o uso de alguns recursos. A melhor coisa a fazer com esse erro de característica é provavelmente especificar que a cota é Infinita:
if (typeof localStorage === 'undefined' || localStorage === null)
{
var LocalStorage = require('node-localstorage').LocalStorage;
localStorage = new LocalStorage(__dirname + '/localStorage',
Infinity);
}
Trocando dois comentários em ordem:
As pessoas desnecessariamente se balançavam no pé constantemente usando JavaScript como um todo, e parte do JavaScript que se tornava uma linguagem respeitável era Douglas Crockford dizendo em essência: “JavaScript como uma linguagem tem algumas partes muito boas e outras muito ruins. Aqui estão as boas partes. Apenas esqueça que qualquer outra coisa está lá. ” Talvez o ecossistema quente do Node.jS desenvolva seu próprio "Douglas Crockford", que dirá: "O ecossistema do Node.js. é um oeste selvagem de codificação, mas existem algumas verdadeiras jóias a serem encontradas. Aqui está um roteiro. Aqui estão as áreas a serem evitadas a quase qualquer custo. Aqui estão as áreas com algumas das mais ricas condições de pagamento encontradas em QUALQUER idioma ou ambiente. ”
Talvez alguém possa tomar essas palavras como um desafio, seguir o exemplo de Crockford e escrever "as partes boas" e / ou "as partes melhores" para o Node.js e seu ecossistema. Eu compraria uma cópia!
E, dado o grau de entusiasmo e as poucas horas de trabalho em todos os projetos, pode ser necessário, em um ano, dois ou três, atenuar acentuadamente quaisquer observações sobre um ecossistema imaturo feito no momento em que este artigo foi escrito. Realmente pode fazer sentido em cinco anos dizer: “O ecossistema do Node.j 2015 teve vários campos minados. O ecossistema 2020 do Node.js. possui vários paraísos. ”