Frameworks JavaScript pour construire des applications à une seule page

Mon objective est de migrer une application Web existante vers une application RESTful à page unique (SPA). Actuellement, j’évalue plusieurs frameworks d’applications Web Javascript.


Mes exigences sont les suivantes:

  • Couche de données RESTful (comme les données de braise)
  • Structure MV *
  • Itinéraires dynamics
  • Test-support
  • Codage par convention
  • SEO-support
  • Navigateur-Historique-Support
  • Bonne documentation (API)
  • Prêt à la production
  • Communauté vivante

Colonne vertébrale

L’application en cours utilise backbone.js . Dans l’ensemble, backbone.js est un projet intéressant, mais il me manque des structures bien définies qui déterminent où et comment les choses doivent être mises en œuvre. Travailler dans une équipe plus grande avec des développeurs en évolution conduit à une sorte de code non structuré, difficile à maintenir et à comprendre. C’est pourquoi je cherche maintenant un framework, qui définit déjà tout cela.

Braise

J’ai regardé dans ember.js les derniers jours. L’approche me semble très prometteuse. Mais, malheureusement, le code change presque quotidiennement. Donc, je ne l’appellerai pas prêt pour la production. Et, malheureusement, nous avons hâte que ce soit la version 1.0. Mais j’aime vraiment l’idée derrière ce cadre.

Angulaire

Angular.js est également un framework largement diffusé par Google. Mais je ne pouvais pas me familiariser avec angular. Pour moi, la structure semble en quelque sorte floue, les explications manquent des responsabilités globales de chaque partie du cadre et les implémentations semblent détournées. Juste pour aller droit au but: ceci est juste mon impression personnelle et pourrait être basée sur des connaissances manquantes.

Batman et Meteor

Si j’ai bien compris, les deux frameworks nécessitent également une partie serveur. Et comme nous voulons juste un backend RESTful – peu importe la langue, la technique ou le logiciel, ce n’est pas ce que nous voulons. De plus, l’API backend existe déjà (RoR).

Knockout , CanJS et Spine

Je n’ai pas approfondi ces trois candidats. Peut-être que ce sera ma prochaine étape.


Alors mes questions maintenant:

  • Est-ce que je manque de bons frameworks SPA?
  • Quel cadre proposeriez-vous / recommanderiez-vous?
  • Éviteriez-vous l’un des frameworks mentionnés?
  • Quelle est votre expérience dans les plus grandes applications SP?

PS: Je voudrais recommander un excellent article de Steven Anderson (développeur principal de Knockout.js) sur la conférence “Throne of JS” (à partir de 2012) et les frameworks javascript en général.

PS: Oui, je sais qu’il y a déjà une question sur SO. Mais comme le développement est si rapide et rapide pour les SPA, la plupart d’entre eux sont déjà obsolètes.

J’ai récemment dû choisir un framework JavaScript SPA sur un projet.

  • Braise

    Regardé Ember dès le début et eu des pensées similaires à ce sujet – je l’ai vraiment aimé, mais j’avais l’impression qu’il était encore trop tôt pour l’utiliser … environ la moitié des tutoriels que je lis ne fonctionnait pas avec la version actuelle changé dans le fonctionnement des modèles.

  • Colonne vertébrale

    Backbone était les premiers frameworks que nous avons sérieusement examinés. Je ne suis pas sûr de comprendre pourquoi vous pensez qu’il n’y a pas de “structures bien définies”? Backbone est assez clair sur la façon de diviser le code Model et View. Peut-être que vous voulez dire qu’il n’y a pas de modèle d’application? Quoi qu’il en soit, Backbone semble vraiment se concentrer sur le modèle / la partie reliure REST, mais ne prescrit rien pour la liaison des vues. Si la liaison de modèle est importante pour vous et que vous utilisez Rails, cela devrait être un jeu d’enfant. Malheureusement, les services Web de mon application ne correspondaient pas vraiment et je devais écrire mes propres méthodes .sync et .parse pour tout. La séparation du code de modèle et de vue était agréable, mais comme nous devions écrire toutes nos liaisons à partir de zéro, cela ne valait pas la peine.

  • Assumr

    Knockout est comme le Yang du Yin à Backbone. Lorsque Backbone se concentre sur le modèle, Knockout est un framework MVVM et se concentre sur la vue. Il possède observable wrappers observable pour les propriétés des objects JavaScript et utilise un atsortingbut data-bind pour lier les propriétés à votre code HTML. En fin de compte, nous sums allés avec Knockout car la liaison des vues était principalement ce dont nous avions besoin pour notre application. (… plus d’autres, comme discuté plus tard …) Si vous aimez la reliure de vue de Knockout et les liaisons de modèle de Backbone, il y a aussi KnockBack qui combine les deux frameworks.

  • Angulaire

    J’ai regardé ça après Knockout – malheureusement, nous semblions tous très satisfaits de la façon dont Knockout avait vu la liaison. Cela semblait beaucoup plus complexe et difficile d’entrer que Knockout. Et il utilise un tas d’atsortingbuts HTML personnalisés pour réaliser des liaisons, ce que je n’estime pas aimer… Je pourrai peut-être revoir Angular plus tard, car depuis que j’ai rencontré plusieurs personnes qui aiment vraiment le framework – peut-être Je l’ai juste regardé trop tard pour ce projet.

  • Batman , Meteor , CanJS , colonne vertébrale

    Je n’ai pas vraiment regardé de près. Bien que je sache, Spine est un cadre similaire à Backbone avec des objects de contrôleur explicites, et est écrit en CoffeeScript.

  • Épilogue

    Comme je l’ai mentionné, nous avons fini par utiliser Knockout car, pour notre projet, il était plus important de se concentrer sur la liaison des vues. Nous avons également utilisé Require JS pour la modularisation, Carrefour et Hasher pour gérer le routage et l’historique, Jasmine pour les tests, ainsi que JQuery , Twitter Bootstrap et Underscore.js (et probablement plus de bibliothèques que j’oublie pour le moment).

    Le développement d’applications Javascript ressemble plus à l’écosystème Java qu’à l’écosystème Rails. Rails fournit un kernel solide de choses que vous allez utiliser pour chaque application (framework Rails), et la communauté fournit beaucoup de personnalisations en plus (gems). Java fournit … un langage. Et puis vous pouvez choisir Java EE ou Spring ou Play ou Struts ou Tapestry. Et choisissez JDBC ou Hibernate ou TopLink ou Ibatis pour communiquer avec la firebase database. Et puis, vous pouvez utiliser Ant ou Maven ou Gradle pour le construire. Et choisissez Tomcat ou Jetty ou JBoss ou WebLogin pour l’exécuter. Il est donc plus important de choisir ce dont vous avez besoin et ce qui fonctionne ensemble que de choisir LE framework à utiliser.

Cela fait maintenant un an que nous avons commencé le développement de notre projet de services Cloud avec de nombreux SPA. C’était donc une décision importante, à savoir quel framework JavaScript utiliser pour notre interface utilisateur afin de satisfaire nos besoins en architecture RESTful. et après beaucoup de recherches, nous avons fini par utiliser le framework Dojo .

principales caractéristiques que vous allez aimer:

  1. communauté instruite et une équipe qui a mis au point un modèle de conception parfait. grandes conventions et architecture modulaire / orientée object. avec les attitudes de programmation CrossBrowser 🙂
  2. Structure MV *. Créez des widgets d’interface utilisateur avec des modèles externes .htm et, pour la production, créez tous vos javascript et modèles dans un seul fichier .js minifié et petit
  3. construire des classes avec inheritance. créateurs de biens, beaucoup d’outils de fonction.
  4. mécanisme pub / sub (sujets nommés dans le dojo)
  5. de nombreux contrôles d’interface utilisateur, du contrôle de formulaire de validation, des boîtes de dialog / des infobulles à une solution de grid de données et de graphique hautement personnalisable (mais légère).
  6. un bon système de test unitaire nommé DOH. il a aussi un robot pour reproduire les actions de la souris / du clavier.
  7. un outil de requête (comme JQuery) nommé NodeList avec toutes les fonctionnalités de jquery et même beaucoup de ses plugins.
  8. et la partie bonne mais pas si complète. Il possède un module JsonRest à utiliser avec vos services REST. C’est un outil pratique mais il manque beaucoup de fonctionnalités.

Pour résoudre ces problèmes, nous avons développé une solution de sondage AJAX, de gestion des erreurs et universelle, de chargement et de notification. nous l’avons fait très facilement en utilisant les conventions et les structures du framework dojo. Si vous ne voulez pas faire cela, vous devrez peut-être utiliser un autre cadre pour cette partie.

En regardant les meilleurs SPAs sur le Web, vous découvrirez qu’ils sont tous personnalisés et utilisent plusieurs frameworks. mais notre expérience avec Dojo seul était fantastique. et par conséquent, je vous suggère de ne penser à aucun autre cadre puisque tous sont incomplets pour un SPA. mais en fin de compte, vous avez également une autre option (que je ne recommande pas et sur laquelle vous n’avez pas d’informations détaillées). aller avec un framework JAVA capable de créer des SPA, en générant automatiquement l’interface utilisateur et le javascript.