Open Gaetanbrl opened 4 years ago
C'est effectivement intéressant. Si cela ne casse rien à ce que supporte Mustache on pourrait faire le tester assez facilement.
Sur le github de Handlebar.js il est fait mention de templates précompilés qui seraient plus performants que ceux de Mustache. A voir donc.
C'est vrai qu'en cherchant un peu on trouve des alternatives à Mustache : https://colorlib.com/wp/top-templating-engines-for-javascript/ Je ne sais pas ce que cela vaut. Je n'ai pas regardé plus que cela.
Intéressant. J'émets quelques réserves cependant sur les templates précompilés. Pour avoir testé ces derniers dans un projet avec Vue.js, ce n'est pas adapté pour des templates chargés dynamiquement tels que ceux utilisés pour mettre en forme la fiche d'information. La précompilation nécessite en effet une déclaration de la ressource au moment du build du projet. Après c'est peut-être différent dans Handlebar.
En effet, je n'ai pas vu que c'était des templates pré compilés. L'expérience identique à celle de @spelhate que nous avons eu ne nous encourage pas vers ce type de mécanique. Je vais tout de même jeter un coup d’œil ...
Quelle suite donnons-nous à cet échange ?
Pas encore testé.
La branche feature-155 vient d'être crée pour cette issue.
Test de portabilité des templates existants vers handlebarJS.
Je viens de tester rapidement sur la démo cluster.xml.
Le template défini par défaut dans cluster.mst ne nécessite aucune modification pour être compatible et "compilé" par HandlebarJS.
Le lien n'est pas cassé. Aucune différence perceptible.
La documentation HandlebarJS est disponible ici :
Voici les points forts de HandlebarJS:
Pour la précompilation, elle n'est pas obligatoire et je ne l'utilise pas dans mon test précédent. C'est surtout pour une utilisation avec npm que cela peut être intéressant pour renvoyer des template déjà compilés.
Je n'ai pas l'impression que cela change de MustacheJS pour l'aspect rendu (render) / compilation.
@Gaetanbrl : Merci pour ce test intéressant. L'objectif c'est de remplacer complètement Mustache, c'est ça ? On peut intervenir directement sur cette branche pour apporter des améliorations ?
Aucun soucis @bchartier pour réaliser des modifications sur cette branche.
L'objectif c'est de remplacer complètement Mustache, c'est ça ?
Si tout est bien iso avec les templates Mustache, je ne vois pas de raison de garder Mustache en effet.
Si tout est bien iso avec les templates Mustache, je ne vois pas de raison de garder Mustache en effet.
comment ça se passe pour les boucles sur les features ?
dans les templates utilisant Mustache, on boucle sur les features comme ceci :
{{#features}}{{/features}}
Si j'ai bien compris, avec Handlebar, il faut faire :
{{#each features}}{{/each}}
, ce qui nous oblige à reprendre tous les templates existants. Mais je me trompe peut être.
ce qui nous oblige à reprendre tous les templates existants
Je ne suis même pas certain que ce soit obligatoire. Pour mon test avec les clusters, je n'ai pas eu à modifier le template cluster.mst. Pourtant on utilise bien {{#features}}
.
Les deux sont pour moi fonctionnels.
Voici un exemple : https://codepen.io/gaetanbrl/pen/GRgGOGX
Ok.
J'ai poussé une mise à jour de la branche feature-155. J'ai remplacé toutes les occurrences de Mustache par Handlebars (y compris dans la doc). J'ai testé que cela fonctionne bien sur les principales fonctions dont les tooltips carto, la recherche avec fuse, le widget de changement de fond de carte. C'est utilisé ailleurs aussi (démo ELS par exemple) mais je n'ai pas ce qu'il faut pour tester. Je pense que cela vaudrait la peine que d'autres personnes testent avant de proposer de fusionner cela sur la branche develop.
C'est utilisé ailleurs aussi (démo ELS par exemple) mais je n'ai pas ce qu'il faut pour tester.
Idem. Il faut que j'installe un ELS. C'est faisable mais pas tout de suite tout de suite...
Je pense que cela vaudrait la peine que d'autres personnes testent avant de proposer de fusionner On peut créer une liste ici du type :
Peux-tu initialiser cette liste, cocher ce que tu as testé actuellement et mettre ce que tu as en tête ensuite ? On complétera :)
Pour ELS : je pense que le plus facile pour @spelhate car il faut des données dispo à la fois via GeoServer et dans Elastic, ainsi qu'un paramétrage spécifique des index pour tester.
Pour la liste :
Ok. Je m'y attèle dès que possible.
Merci @bchartier
@Gaetanbrl : j'ai noté que tu importes la dernière version de Handlebars. Je pense qu'il est préférable de se fixer une version particulière pour éviter toute régression non anticipée due à une évolution trop forte de la bibliothèque. De temps en temps il faudra regarder l'évolution de la bibliothèque pour passer à quelque chose de plus récent comme on le fait avec OpenLayers.
Pour info, j'ai commencé à tester. A partir de l'exemple disponible dans demo/sirene.xml et avec la couche Base sirene, j'ai deux cas qui ne semblent pas fonctionner
{{{html}}}
qui permet dans Mustache d'afficher de l'html non échappé,{{#field1}}Champ1: {{field1}}{{/field1}}
qui ne fonctionne pas.A partir de l'exemple disponible dans demo/sirene.xml et avec la couche Base sirene
Je vais regarder ce qui n'est pas compatible avec ce cas cette semaine... c'est étrange.
Où est-ce qu'on en est de ce ticket ? Est-ce que c'est abandonné ou est-ce qu'il faut qu'on y mette un peu d'énergie ?
J'ai un peu oublié ce ticket... je me le laisse et me le note quand j'aurai un moment...
Mustache.js est logic-less et ne permet donc pas l'intégration de logique simple (if, else, each, etc...).
Il existe probablement d'autres librairie qui pourrait compléter ou étendre mustache.js. L'objectif serait de trouver un élément qui soit compatible avec la syntaxe mustache.js actuelle. Je pense ici à Handlebar.js.