L'équipe d'Ember.js vient de publier la version 1.5, qui apporte de nouvelles fonctionnalités de test et un système d'url plus réactif qui améliore l'UX dans 99% des cas selon Robert Jackson, un membre de l'équipe Ember.
Via un article sur le blog Ember.js, il décrit cette nouvelle version comme ayant "plein de corrections de bugs et de petites améliorations", en plus des nouvelles fonctionnalités.
Cette version 1.5 apporte le logger Handlebars pour les valeurs primitives que Jackson décrit comme une fonctionnalité qui "permet de logger des valeurs comme des strings, nombres, etc, depuis un template". Dans les versions précédentes, le helper {{log}} ne permettait que l'affichage de valeurs bindées.
De nouveaux helpers de test font leur apparition, comme currentRouteName, currentPath, et currentURL. Jackson les décrit comme "facilitateurs pour faire des assertions sur l'état du routing dans l'application".
Au delà de la journalisation et des tests, Ember.js 1.5 modifie Ember.computed.oneWay et apporte un nouveau raccourci : Ember.isBlank shortcut, pour tester si un objet ou une string est vide.
Dans les versions, pour éviter la propagation ascendante des données, il fallait utiliser “Ember.computed.oneWay('foo').readOnly()”, ce qui devient “Ember.computed.readOnly('foo')” dans la nouvelle version.
L'autre grande nouveauté est le système de mise à jour des URL : “Auparavant, l'URL était mise à jour à la fin de la transition. Maintenant, elle change directement, à moins que la transition ait été annulée ou redirigée durant la même run loop, ce qui améliore l'UX dans 99% des cas” selon Jackson.
Une correction de bug a introduit une régression avec la 1.5, qui concerne l'utilisation de _super
dans certains cas. Dans les versions précédentes, une boucle infinie était déclenchée lorsque plusieurs appels à _super
d'une même fonction étaient faits et qu'aucune terminaison n'était mise en place. Jackson a demandé à tous ceux concernés par cette régression de commenter l'issue concernée #4632.
Parmi les corrections de bugs, on trouve :
- run.bind conserve les arguments du callback
- Ember.copy supporte maintenant les Date
- Permettre aux composants avec un layoutName défini par le parent de spécifier un templateName
- PromiseProxyMixin réinitialise isFulfilled et isRejected
La réaction de la communauté à cette nouvelle version a été majoritairement positive. Adrian Meredith s'est exprimé via les commentaires “Quand est-ce que les requêtes paramétrées seront disponibles... Je suis très supris de la faible priorité qui est donnée à une telle fonctionnalité, personne n'a de recherches dans leur application ?".
Ilya Radchenko, un autre utilisateur, a répondu que “Cette fonctionnalité n'est pas faiblement priorisée mais que l'équipe souhaite la mettre en place correctement car il s'agit d'une fonctionnalité importante et d'un problème difficile avec de nombreux cas-limites". Alex Matchneer, un des membres de l'équipe de développement a confirmé et ajouté que “la priorité est très haute... Nous n'encourageons pas vraiment leur utilisation mais de nombreux utilisateurs les ont déjà mis en production”.
Sur le Forum de Discussion Ember.js, l'utilisateur gordon_kristan mentionne “un déclin notable des performances entre la 1.4.0 et la 1.5.0”, et décrit “Mon application chargeait précédemment en 5 secondes environ, contre 30 maintenant."
Bien que la cause de ce problème n'ait pas encore été identifiée au moment où j'écris, Stefan Penner - un membre de l'équipe Ember.js - a répondu “J'espère que non, mais cela pourrait être lié à mes ajustements de performances. Nous les avons testés sur plusieurs grosses applications et tous les cas ont montré des améliorations". (NDT : Le problème a été identifié et était lié à un fragment de code de l'utilisateur dont l'exécution a ralenti suite à une correction de bug dans Ember.js 1.5, qui n'utilisait pas beingPropertyChanges
et endPropertyChanges
autour de boucles réalisant de nombreuses mises à jour de propriétés. Stefan étudie un correctif évitant une telle régression).
Accompagnant l'annonce de la sortie de la 1.5, la beta de la 1.6 a été annoncée et elle devrait contenir de nouvelles fonctionnalités, ainsi qu'une amélioration des performances d'accès au cache.