web-dev-qa-db-fra.com

Ember.js ou Backbone.js pour le backend Restful

Je sais déjà que ember.js est une approche plus lourde contrairement à backbone.js. J'ai lu beaucoup d'articles sur les deux.

Je me demande quel framework fonctionne plus facilement comme frontend pour un Rails rest backend. Pour backbone.js j'ai vu différentes approches pour appeler un rest backend. Pour ember = il semble que je doive inclure d'autres bibliothèques comme "data" ou "resources". Pourquoi y a-t-il deux bibliothèques pour cela?

Quel est donc le meilleur choix? Il n'y a pas beaucoup d'exemples pour connecter le frontend au backend aussi. Quel est un bon exemple de travail pour un appel de backend à ceci:

URI: ../restapi/topics GET informations d'authentification: admin/format correct: json

98
Robin Wieruch

Contrairement à l'opinion populaire, Ember.js n'est pas une "approche plus lourde" de Backbone.js. Ce sont différents types d'outils qui ciblent des produits finaux totalement différents. Le sweet spot d'Ember est les applications où l'utilisateur gardera l'application ouverte pendant de longues périodes, peut-être toute la journée, et les interactions avec les vues de l'application ou les données sous-jacentes déclenchent de profonds changements dans la hiérarchie des vues. Ember est plus grand que Backbone, mais grâce à Expires, Cache-Control cela n'a d'importance que lors du premier chargement. Après deux jours d'utilisation quotidienne, ces 30 000 euros supplémentaires seront éclipsés par les transferts de données, plus tôt si votre contenu comporte des images.

Le backbone est idéal pour les applications avec un petit nombre d'états où la hiérarchie des vues reste relativement plate et où l'utilisateur a tendance à accéder à l'application rarement ou pendant des périodes plus courtes. Le code de Backbone doit rester court et doux car il suppose que les données sauvegardant le DOM seront jetées et que les deux éléments seront collectés en mémoire: https://github.com/documentcloud/backbone/issues/231 # issuecomment-44524 La taille plus petite du backbone le rend également mieux adapté aux brèves interactions.

Les applications que les gens écrivent dans les deux cadres reflètent ces utilisations: les applications Ember.js incluent tableau de bord Web de Square , Zendesk (au moins l'interface agent/ticket), et Planificateur de Groupon : toutes les applications dans lesquelles un utilisateur peut passer toute la journée à travailler.

Les applications backbone se concentrent davantage sur les interactions brèves ou occasionnelles, qui ne sont souvent que de petites sections d'une page statique plus grande: airbnb , Khan Academy , carte et listes de Foursquare .

Vous pouvez utiliser Backbone pour créer les types d'applications que Ember cible (par exemple Rdio ) en a) augmentant la quantité de code d'application dont vous êtes responsable pour éviter des problèmes comme les fuites de mémoire ou les événements zombies (je ne recommande pas personnellement cette approche) ou b) en ajoutant des bibliothèques tierces comme backbone.marionette ou Coccyx - il y a beaucoup de ces bibliothèques qui essayent toutes de fournir des fonctionnalités similaires qui se chevauchent et vous finirez probablement par assembler votre propre cadre personnalisé qui est plus grand et nécessite plus de code de colle que si vous venais d'utiliser Ember.

En fin de compte, la question de "laquelle utiliser" a deux réponses.

Premièrement, "Que dois-je utiliser, en général, dans ma carrière": les deux, tout comme vous finirez par apprendre les outils spécifiques au travail que vous voudrez utiliser à l'avenir. Vous ne demanderiez jamais "Backbone ou D3?"; "Backbone or Ember" est une question tout aussi idiote.

Deuxièmement, "Que dois-je utiliser, en particulier, sur mon prochain projet": dépend du projet. Les deux communiqueront avec un serveur Rails avec la même facilité. Si votre prochain projet implique un mélange de pages générées par le serveur avec des soi-disant "îlots de richesse" fournis par JavaScript, utilisez Backbone. Si votre le prochain projet pousse toute l'interaction dans l'environnement du navigateur, utilisez Ember.

257
Trek Glowacki

Pour donner une réponse brève et simplifiée: pour un backend RESTful, pour le moment, vous devez utiliser Backbone.

Pour donner une réponse plus complexe: cela dépend vraiment de ce que vous faites. Comme d'autres l'ont dit, Ember est conçu pour différentes choses et plaira à un ensemble différent de personnes. Ma réponse courte est basée sur votre inclusion de l'exigence RESTful.

Pour le moment, Ember-Data (qui semble être le mécanisme de persistance par défaut dans Ember) est loin d'être prêt pour la production. Cela signifie qu'il contient un certain nombre de bogues et, surtout, ne prend pas en charge les URI imbriqués (/ posts/2/comments/4556 par exemple). Si REST est votre exigence, alors vous devrez contourner cela pour le moment si vous choisissez Ember (c'est-à-dire que vous devrez soit le pirater, attendre, mettre en œuvre quelque chose comme Ember-Data à partir de zéro, ou utilisez des URI pas très RESTful). Ember-Data ne fait pas strictement partie d'Ember, c'est donc tout à fait possible.

Les principales différences entre les deux, hormis la taille, sont essentiellement:

Ember essaie de faire autant que possible pour vous, afin que vous n'ayez pas à écrire autant de code. Il est très hiérarchique et, si votre application est également très hiérarchique, elle conviendra probablement. Parce que cela fait beaucoup pour vous, il peut être difficile de comprendre d'où viennent les bogues et de comprendre pourquoi un comportement inattendu se produit (il y a beaucoup de "magie"). Si vous avez une application qui s'intègre naturellement dans le type d'application que Ember s'attend à ce que vous construisiez, cela ne sera probablement pas un problème.

Backbone essaie de faire le moins possible pour vous afin que vous puissiez raisonner sur ce qui se passe et créer une architecture qui convient à votre application (plutôt que de créer une application qui correspond à l'architecture du cadre que vous utilisez). C'est beaucoup plus facile de commencer, mais, à moins que vous ne soyez prudent, vous pouvez vous retrouver avec un gâchis très rapidement. Il ne fait pas de choses comme les propriétés calculées, les événements de déconnexion automatique, etc. et les laisse à vous, donc vous devrez implémenter beaucoup de choses vous-même (ou au moins choisir des bibliothèques qui le font pour vous), bien que ce soit plutôt le point entier.

pdate: Il semble que, récemment, Ember prend désormais en charge les URI imbriqués, donc je suppose que la question se résume à la quantité de magie que vous aimez et si Ember est un bon choix architectural pour votre application.

26
bengillies

Je pense que votre question sera bientôt bloquée :) Il y a quelques controverses entre les deux frameworks.

Fondamentalement, Backbone ne fait pas beaucoup de choses, et c'est pourquoi j'aime ça: vous devrez beaucoup coder, mais vous coderez au bon endroit. Ember fait beaucoup de choses, donc vous feriez mieux de regarder ce qu'il fait.

La discussion sur le serveur est l'une des rares choses que fait Backbone, et elle fait un excellent travail avec elle. Je commencerais donc par Backbone, puis j'essaierais de Ember si vous n'êtes pas totalement satisfait.

Vous pouvez également écouter ce podcast où Jeremy Ashkenas, créateur de Backbone, et Yehuda Katz, membre d'Ember, ont une discussion agréable

3
Nicolas Zozol