Ember.js ou Backbone.js para back-end Restful [fechado]

98

Eu já sei que ember.js é uma abordagem mais pesada em comparação com backbone.js. Eu li muitos artigos sobre ambos.

Estou me perguntando, qual framework funciona mais facilmente como front-end para um back-end de descanso de trilhos. Para backbone.js, vi diferentes abordagens para chamar um back-end restante. Para o ember, parece que tenho que incluir mais algumas bibliotecas como 'dados' ou 'recursos'. Por que existem duas bibliotecas para isso?

Então, qual é a melhor escolha? Não existem muitos exemplos para conectar o frontend ao backend também. Qual é um bom exemplo de trabalho para uma chamada de back-end para este:

URI: ../restapi/topics GET credenciais de autenticação: formato admin / secrect: json

Robin Wieruch
fonte
3
Tenho que amar uma pergunta que "não é construtiva", mas a resposta útil e bem pensada ainda tem mais de 240 votos positivos.
Andrew

Respostas:

257

Ao contrário da opinião popular, o Ember.js não é uma 'abordagem mais pesada' para o Backbone.js. São diferentes tipos de ferramentas que visam produtos finais totalmente diferentes. O ponto forte do Ember são os aplicativos em que o usuário mantém o aplicativo aberto por longos períodos, talvez o dia todo, e as interações com as visualizações do aplicativo ou dados subjacentes acionam mudanças profundas na hierarquia de visualizações. O Ember é maior que o Backbone, mas graças a isso Expires, Cache-Controlisso só importa na primeira carga. Após dois dias de uso diário, esses 30k extras serão ofuscados por transferências de dados, mais cedo se o seu conteúdo envolver imagens.

O backbone é ideal para aplicativos com um pequeno número de estados nos quais a hierarquia de visualização permanece relativamente plana e onde o usuário tende a acessar o aplicativo com pouca frequência ou por períodos mais curtos de tempo. O código do backbone permanece curto e agradável porque pressupõe que os dados que sustentam o DOM serão descartados e ambos os itens serão coletados na memória: https://github.com/documentcloud/backbone/issues/231#issuecomment-4452400 O tamanho menor do backbone também o torna mais adequado para interações breves.

Os aplicativos que as pessoas escrevem em ambas as estruturas refletem estes usos: os aplicativos Ember.js incluem o painel da web da Square , o Zendesk (pelo menos a interface do agente / tíquete) e o agendador do Groupon : todos os aplicativos nos quais um usuário pode passar o dia inteiro trabalhando.

Os aplicativos de backbone se concentram mais em interações breves ou casuais, que geralmente são apenas pequenas seções de uma página estática maior: airbnb , Khan Academy , mapa e listas do Foursquare .

Você pode usar o Backbone para fazer os tipos de aplicativos que o Ember almeja (por exemplo, Rdio ) por a) aumentando a quantidade de código do aplicativo pela qual você é responsável para evitar problemas como vazamentos de memória ou eventos zumbis (eu pessoalmente não recomendo essa abordagem) ou b) adicionando bibliotecas de terceiros como backbone.marionette ou Coccyx - há muitas dessas bibliotecas que tentam fornecer funcionalidade de sobreposição semelhante e você provavelmente acabará montando sua própria estrutura personalizada que é maior e requer mais código de cola do que se você tivesse acabado de usar Ember.

Em última análise, a questão de "qual usar" tem duas respostas.

Primeiro, "O que devo usar, geralmente, em minha carreira": ambos, assim como você acabará aprendendo quaisquer ferramentas específicas para o trabalho que queira fazer no futuro. Você nunca perguntaria "Backbone ou D3?"; "Backbone or Ember" é uma pergunta igualmente boba.

Segundo, "Qual devo usar, especificamente, no meu próximo projeto": Depende do projeto. Ambos se comunicarão com um servidor Rails com igual facilidade. Se o seu próximo projeto envolver uma mistura de páginas geradas pelo servidor com as chamadas "ilhas de riqueza" fornecidas pelo JavaScript, use o Backbone. Se o seu próximo projeto empurra toda a interação para o ambiente do navegador, use o Ember.

Trek Glowacki
fonte
4
Ótima resposta, Trek. Só queria comentar aqui isso Expirese Cache-Controlajudar muito menos do que as pessoas pensam - especialmente em termos de dispositivos móveis que muitas vezes os ignoram. Lembro-me que uma versão do iOS os ignorou completamente (mas ainda ouço o manifesto do cache HTML5). Além disso, esses valores de cabeçalho não ajudarão durante a primeira visita de um usuário - o que geralmente é o mais crítico para decidir se o usuário permanecerá e usará seu aplicativo. Dizer toda aquela diferença de arquivo de 30kb não parece grande coisa para mim. É uma diferença bruta ou reduzida de 30k em gzip?
Mauvis Ledford,
11
Se você olhar para os aplicativos reais que têm o estilo que o Ember pretende ajudar a criar, você descobrirá que não há como escapar desses kbs incômodos. Ou eles vêm do Ember e o código do seu aplicativo é menor, ou vêm de plug-ins de backbone, ou de código que você mesmo escreve. Wunderlist , que você pensaria que seriam "simples", relógios em torno de 300kb de transferência. Eu imagino que seria do mesmo tamanho com o Ember, talvez menor - nunca tendo escrito uma cópia exata do Wunderlist, não posso dizer com 100% de certeza.
Trek Glowacki
1
Eu concordo, meu aplicativo de backbone mais popular tem um clock de 178kb + modelos compactados e reduzidos. Apenas apontando como não devemos confiar no cache do navegador.
Mauvis Ledford,
2
Trek, você está no ponto com sua análise do uso do Backbone em aplicativos com padrões de uso estendidos e gerenciamento de estado complexo. Passei pela experiência de converter um aplicativo legado em Backbone e tive que fazer exatamente o que você listou. Precisávamos integrar o Marionette, bem como escrever muito código de cola para coisas como filtragem de rota pré / pós, mitigação de vazamento de memória e melhor gerenciamento de eventos.
Mike Clymer
9
"Você nunca pediria ao Backbone ou ao D3" - claro, mas posso facilmente imaginar um projeto em que usaria o D3 em conjunto com o Backbone. Provavelmente é muito mais difícil imaginar um projeto em que o Backbone e o Ember são usados ​​juntos em uma única página. Então, acho a pergunta "Backbone ou Ember" bastante justa. Aqui está outro post que achei bastante informativo, porque compara os dois frameworks mais profundamente: net.tutsplus.com/tutorials/javascript-ajax/…
Shiprack
26

Para dar uma resposta breve e simplificada: para um back-end RESTful, no momento, você deve usar o Backbone.

Para dar uma resposta mais complexa: realmente depende do que você está fazendo. Como já foi dito, o Ember foi projetado para coisas diferentes e atrairá um grupo diferente de pessoas. Minha resposta curta é baseada na sua inclusão do requisito RESTful.

No momento, o Ember-Data (que parece ser o mecanismo de persistência padrão do Ember) está longe de estar pronto para produção. O que isso significa é que ele tem alguns bugs e, fundamentalmente, não suporta URIs aninhados (/ posts / 2 / comments / 4556 por exemplo). Se REST for o seu requisito, você terá que contornar isso por enquanto se escolher o Ember (ou seja, você terá que hackear, esperar, implementar algo como Ember-Data do zero por conta própria, ou não usar -very-RESTful URIs). O Ember-Data não faz parte estritamente do Ember, então isso é totalmente possível.

As principais diferenças entre os dois, além do tamanho, são basicamente:

O Ember tenta fazer o máximo possível por você, para que você não precise escrever tanto código. É muito hierárquico e, se seu aplicativo também for muito hierárquico, provavelmente será um bom ajuste. Como ele faz muito por você, pode ser difícil descobrir de onde vêm os bugs e raciocinar por que um comportamento inesperado está acontecendo (há muita "mágica"). Se você tiver um aplicativo que se encaixa naturalmente no tipo de aplicativo que Ember espera que você crie, isso provavelmente não será um problema.

O Backbone tenta fazer o mínimo possível para que você possa raciocinar sobre o que está acontecendo e construir uma arquitetura que se ajuste ao seu aplicativo (em vez de construir um aplicativo que se ajuste à arquitetura da estrutura que você está usando). É muito mais fácil começar, mas, a menos que você tome cuidado, pode acabar com uma bagunça muito rapidamente. Ele não faz coisas como propriedades computadas, eventos de desassociação automática, etc e deixa-os por sua conta, então você precisará implementar muitas coisas você mesmo (ou pelo menos escolher bibliotecas que façam isso para você), embora isso seja antes, todo o ponto.

Atualização : parece que, recentemente, o Ember agora oferece suporte a URIs aninhados, então suponho que a questão se resume a quanta magia você gosta e se o Ember é um bom ajuste, arquiteturalmente, para seu aplicativo.

bengillies
fonte
5
"crucialmente, não suporta URIs aninhados (/ posts / 2 / comments / 4556 por exemplo)" Aqui está o commit relevante de algumas semanas atrás: github.com/emberjs/data/commit/… . Ele sabe que pode ser difícil acompanhar uma estrutura de pré-lançamento que se move rapidamente, mas devemos sempre buscar a precisão ao falar com autoridade e oferecer conselhos!
Trek Glowacki
Legal, obrigado. Atualizei minha resposta. Presumo que isso tenha sido introduzido na grande fusão de relacionamentos na semana passada. Dei uma olhada e li as alterações listadas, mas não consegui encontrar nenhuma menção aos urls e os problemas que eu estava rastreando ainda estavam abertos quando os verifiquei. Obrigado por apontar o commit - pode ser difícil localizá-lo sem já saber sua existência.
bengillies
Na verdade, é da recente fusão do ramo de melhorias de relacionamento. Estamos acompanhando lentamente as questões antigas e fechando-as esta semana.
Trek Glowacki
3

Acho que sua pergunta será bloqueada em breve :) Existem algumas controvérsias entre os dois frameworks.

Basicamente, o Backbone não faz muitas coisas, e é por isso que eu adoro: você terá que codificar muito, mas codificará no lugar certo. Ember faz um monte de coisas, então é melhor você observar o que ele está fazendo.

A discussão do servidor é uma das poucas coisas que o Backbone faz, e faz um ótimo trabalho com ela. Então, eu começaria com o Backbone e depois tentaria o Ember se você não estiver totalmente satisfeito.

Você também pode ouvir este podcast onde Jeremy Ashkenas, criador do Backbone, e Yehuda Katz, membro do Ember, têm uma boa discussão

Nicolas Zozol
fonte
2
Obrigado. O que você pode dizer sobre as extensões rets da brasa. Melhor usar dados ou recursos? Você pode dar um exemplo simples de uma chamada de API de descanso?
Robin Wieruch
1
A resposta curta é que as bibliotecas variam o tempo todo e não posso dar uma resposta com base em minha experiência anterior (fiz isso sozinho para avaliação). Acho que este post vai dizer mais do que eu: stackoverflow.com/questions/8623091/ember-js-rest-api
Nicolas Zozol
1
Eu já vi esse post. Foi por isso que perguntei :)
Robin Wieruch
2
@NicolasZozol qual podcast? ligação ?
deepak
3
javascriptjabber.com/004-jsj-backbone-js-with-jeremy-ashkenas de fevereiro. Isso antes de ficar mais claro que essas estruturas não existiam realmente em arenas sobrepostas. Você pode ouvir Yehuda e Jeremy apenas conversando, sem realmente fazer comparações.
Trek Glowacki