Posté le 16.06.2012
Un billet technique pour changer un peu. Le rythme de ce blog a été un peu ralenti ces derniers temps, car je me suis beaucoup occupé du projet TYPO3 auquel je participe. En particulier, j'ai préparé une nouvelle version majeure d'une de mes extensions, qui, en deux mots, permet d'importer des données de sources tierces dans TYPO3 au moyen d'interfaces standardisées.
Cette extension fournit, entre autres, un module d'administration permettant de voir toutes les configurations d'import, de lancer des synchronisations manuelles et de gérer les synchronisations automatiques (via le gestionnaire de tâches de TYPO3). Ce module datait salement et c'est surtout sur ce point que j'ai travaillé. Je l'ai mis à jour d'un point de vue habillage, pour coller au look actuel de l'administration TYPO3, mais surtout j'ai refait toute sa logique pour coller à ce que se fait actuellement dans TYPO3.
Pour l'essentiel, cela a impliqué d'utiliser ExtJS, une grosse librairie JavaScript qui fournit de très nombreux "widgets", comme des fenêtres, des tableaux triables, des calendriers, j'en passe et des meilleures. ExtJS est conçu pour permettre de développer de vraies applications dans un browser.
Ce ne fut pas une partie de plaisir. J'ai trouvé ExtJS mal documenté et les exemples insuffisants, beaucoup trop simples pour être vraiment utiles dès que l'on se lancer dans un développement sérieux. Certes, l'API est documentée, mais trouver les choses n'est pas intuitif. J'ai souvent tâtonné, m'inspirant d'exemples piochés à droite et à gauche, et c'est quand j'avais enfin la solution que je pouvais retourner vers l'API et constater que l'information était là. Encore fallait-il la trouver.
J'ai aussi utilisé ExtDirect, qui est un genre de couche d'abstraction des appels AJAX permettant de mapper des appels de fonctions JavaScript directement sur des fonctions PHP. Ceci requiert qu'une interface existe, ce qui est le cas dans TYPO3. C'est une technologie encore assez nouvelle du côté d'ExtJS, et encore moins documentée, si cela était possible. En plus, c'était mal documenté côté TYPO3 aussi dans ce cas.
Tout n'est pas négatif. Quand on commence à se sentir familier avec le système, on peut créer assez facilement des interfaces complexes, qui ont bonne allure. Toutefois, cela ne suffit pas à me convaincre, surtout qu'il y a un autre point qui me dérange beaucoup: la maîtrise du rendu. Avec ExtJS, on ne fait que paramétrer des composants et ExtJS pilote le rendu HTML. Or, ce rendu est extrêmement lourd, avec des tonnes de balises imbriquées, qui rendent le travail d'habillage franchement pénible. Je préfère utiliser des solutions où je génère toutes les balises moi-même, puis rajoute une couche d'augmentation en JavaScript.
Nul doute que je ferai encore du ExtJS dans le futur, puisque c'est une librairie couramment utilisée dans le monde TYPO3, mais je ne vais certainement pas la choisir volontairement pour un projet où il existe des alternatives.
OH: "We use ExtJS everywhere where it makes sense. Currently we don*t use it at all." #t3con12ca
— Robert Lemke (@robertlemke) June 15, 2012