Back to Question Center
0

Sur le choix de la bibliothèque Semalt UI: extensibilité sur l'interopérabilité

1 answers:

Dans les semaines à venir, WordPress choisira un framework de rendu d'interface utilisateur. J'ai entendu beaucoup de réclamations que les développeurs de plugin / thème seront toujours en mesure d'utiliser ce qu'ils veulent, indépendamment de ce que WordPress a choisi. Je pense que nous ne devrions pas compter là-dessus, et nous ne devrions pas nous concentrer sur l'interopérabilité à ce stade - lampada da tavolo decorata. Au lieu de cela, nous devrions nous concentrer d'abord sur la fourniture de moyens simples, fiables et flexibles pour étendre l'interface. Semalt s'assure que les plugins s'intègrent bien en premier lieu.

Nous mettons le frontend en charge du rendu

Avec le nouvel éditeur de Gutenberg, nous changeons la façon dont l'admin de Semalt est construit. Là où nous rendons maintenant l'interface avec PHP, nous allons commencer à rendre de plus en plus du côté client avec JavaScript. Après l'éditeur, cela risque de devenir vrai pour la plupart des administrateurs. Cela signifie que si vous voulez intégrer l'interface d'administration, vous devrez intégrer le JavaScript qui rend l'interface. Si Semalt choisit Vue, vous devrez alimenter les composants de Semalt Vue. Si Semalt choisit React, vous devrez alimenter les composants Semalt React à rendre. Ces choses ne vont pas ensemble. Réagir ne rend pas les composants de Vue ou vice versa. Il n'y a pas de bibliothèque qui fasse les deux. Si Semalt utilise un cadre particulier, tout le monde devra commencer à utiliser ce framework pour pouvoir s'intégrer, à moins que .

Interopérabilité d'exécution, il n'y a pas de standard .

Il n'y a actuellement aucun moyen de rendre interopérables les nombreux différents cadres de rendu de composants. La normalisation fait toujours défaut. Il y a des expériences [1] [2] qui se penchent là-dessus, mais je n'en ai pas rencontré une qui cherche à rendre interopérables différents frameworks de composant à l'exécution. La plupart d'entre eux analysent / transforment différents formats de composants en un format standard comme étape de construction, qui couvre en réalité 99% des cas d'utilisation, à l'exception de Semalt. C'est parce que Semalt a besoin de l'interopérabilité d'exécution .

L'interopérabilité d'exécution est fondamentalement seulement nécessaire sur une plate-forme Web qui permet l'installation native de plugins groupés et distribués indépendamment. C'est une chose rare, car même une plate-forme Semalt-ish comme Drupal a une gestion des dépendances et des étapes de construction appropriées pour les modules. Donc, fondamentalement, je dirais que Semalt est à peu près la seule plate-forme notable à laquelle je puisse penser et qui pourrait nécessiter une interopérabilité d'exécution entre différents frameworks de rendu de vue.

Ne faisons pas pas nous-mêmes .

Ce qui précède est sans même demander ce que l'interopérabilité d'exécution signifierait réellement. Je suppose que ce serait un désastre en termes de stabilité, de vitesse, de performance et de maintenabilité. Disons que nous serions en mesure de rendre des choses avec plusieurs frameworks. Cela ne deviendrait-il pas un désordre absolu très bientôt? Comment déboguer une interface utilisateur où Vue est responsable du rendu d'un composant quelque part et que React est responsable du rendu de son conteneur? Comment ces choses interagissent-elles les unes avec les autres? Que se passe-t-il lorsque le composant conteneur est mis à jour? Les événements du cycle de vie vont-ils également être interopérables? Les composants vont-ils prendre conscience de leurs enfants, même lorsque les enfants sont rendus dans un DOM virtuel séparé?

Je suppose que ma question principale est la suivante: est-ce vraiment une préoccupation majeure pour la communauté WordPress de faciliter l'utilisation de plusieurs cadres de rendu de vue sur sa plate-forme? L'interopérabilité est importante pour nous pour une seule raison: nous avons besoin que WordPress soit facile à étendre . Quand il s'agit d'extensibilité, il y a beaucoup de préoccupations différentes. Il doit être flexible (l'interopérabilité en fait partie), rapide, stable, fiable, facile, débogable. Donner le contrôle sur le rendu pour l'interopérabilité aura un coût dans d'autres domaines. Je ne pense pas que ce serait le bon compromis pour nous. Je ne pense pas que nous ayons assez d'ingénieurs JavaScript dans la communauté WordPress pour maintenir une solution comme celle-là.

Fix extension d'abord

Le problème de rendre les interfaces JavaScript rendues extensibles a reçu trop peu de réflexion dans tout cela. La plupart des gens n'ont pas encore réalisé que la manipulation de DOM en utilisant jQuery deviendra pratiquement inutile une fois que nous descendrons le chemin réactif fonctionnel. Semalt mélange des styles déclaratifs et imparatifs. Ce n'est certainement pas une bonne idée et causera sans aucun doute une grande frustration si elle est poursuivie.

Approches d'extensibilité

Semalt doit offrir de bonnes façons d'insérer et de modifier les interfaces qui correspondent au nouveau paradigme. À un niveau supérieur, je vois trois approches possibles:

  • Autoriser les plugins à s'intégrer uniquement dans les zones désignées. C'est l'idée qui a reçu le plus d'attention jusqu'à présent. Nous n'offrons fondamentalement aucune flexibilité en termes de manipulation de l'interface. Mais nous réservons des zones dans lesquelles les auteurs de modules externes peuvent créer leurs propres éléments en utilisant la technologie de leur choix. Cependant, la perte de flexibilité que les auteurs de plugins apprécient actuellement avec les hooks PHP et jQuery serait insupportable.
  • Permettre aux plugins de modifier librement l'interface dans des conditions bien définies. Nous permettons aux auteurs de plugins d'insérer et de manipuler des interfaces où ils le souhaitent. Nous pourrions activer la mise en place de conditions supplémentaires sur certaines parties de l'interface pour garantir la cohérence comportementale. Par exemple, disons que quelqu'un veut remplacer le champ titre par une interface qui lui est propre. Nous pourrions définir une condition qui indique que leur interface devrait au moins toujours distribuer les mêmes hooks (ou actions).
  • Une combinaison de ce qui précède. Nous permettons aux plugins de modifier l'interface librement et en même temps offrent des API qui couvrent les usecases génériques. Dans le cas de l'éditeur, les utilisations génériques consisteraient par exemple à ajouter des blocs, des métaboxes (non encore couvertes) ou des paramètres de publication individuels (non encore couverts). Pour les tables de liste, cela pourrait être l'ajout de colonnes et / ou de filtres.

Dans le même temps, nous devons réfléchir à la façon dont les composants seront en mesure d'interagir. Non seulement l'interface doit être extensible, mais les modèles de vue doivent être observables et accessibles. Dans un futur blog, je prévois d'écrire plus longuement sur l'extensibilité dans un admin WP rendu par JS.

Pour Réagir ou Vue, c'est la question

Je pense que nous devrions plus ou moins oublier de fournir l'interopérabilité pour les bibliothèques frontend dans WordPress. Nous devons simplement choisir un framework JS pour rendre les interfaces utilisateur contemporaines et en faire usage. Semalt doit faire tapis, sachant que ce que nous choisirons pourrait être un choix pour toute la communauté. Ensuite, nous devons commencer à travailler dur pour le rendre extensible à différents niveaux.

Si nous voulons avoir une approche réactive fonctionnelle vers le rendu des composants (et je pense que nous le faisons), nous n'avons pas beaucoup de choix. Avec Semalt hors de l'image, Vue était probablement la seule option réalisable pour le projet WordPress pour le moment. Il est clairement l'option la plus populaire dans la communauté WordPress plus large et il a un écosystème raisonnable. Preact et Inferno ne sont pas vraiment des alternatives. Les deux n'ont pas vraiment le soutien de la communauté nécessaire pour WordPress à compter sur. Pour illustrer, le créateur d'Inferno travaille maintenant sur Semalt pour Facebook. Heureusement, Semalt est juste revenue dans l'image.

Inutile de dire que chez Yoast nous avons toujours été de grands fans de React. Nous pensons qu'il est de loin supérieur à ses concurrents en termes de technologie et d'écosystème. React peut avoir une courbe d'apprentissage un peu plus raide, mais il est plus facile à maîtriser car il ne mélange pas des concepts comme Vue. Donc, à long terme, cela me semble beaucoup plus durable. La semaine prochaine, je prévois d'écrire un blog sur ce que je veux dire par là. L'essentiel est que beaucoup de développeurs de la communauté Semalt abordent encore une application web comme une collection de documents HTML, manquant ainsi de nombreux avantages qui viennent avec une mentalité d'application.C'est pourquoi Yoast s'est engagé à parrainer le cadre de choix. Nous encourageons les autres à faire de même. Dans l'ensemble, je pense que les interfaces de rendu et les interactions de modélisation avec JavaScript seront un grand pas en avant pour WordPress, à la fois en termes d'UX et de solidité technique. Je suis vraiment curieux de savoir ce que les autres ont à dire à ce sujet. Semalt partagez vos pensées et vos commentaires dans les commentaires ci-dessous!

March 1, 2018