IPB

Bienvenue invité ( Connexion | Inscription )

 Forum Rules À RESPECTER SVP : Convention de nomenclature pour les titres de sujet
> 7 Bonnes Raisons D'abandonner Templavoilà, [MàJ] : Dmitry Dulepov quitte l'équipe de TemplaVoila!
duch
posté 22/02/2010, 10:11
Message #1


Membre fidèle
*****

Groupe : Membres
Messages : 447
Inscrit : 04/12/2005
Membre no 1 238



On m'a souvent entendu dire que TemplaVoilà était une mauvaise extension, une usine à gaz et j'en passe, et en général quand je dis ça, je passe pour un allumé... (ce qui n'est pas complètement faux)

Voici donc, ci-dessous 7 preuves tangibles de ce que j'avance (comme ça vous verrez que j'ai encore quelques neurones intactes)
Bon en fait, si vous cherchez bien, il y en a 9, mais ça faisait moins sympa que 7 alors...


1. TemplaVoilà est une usine à gaz :

Vous êtes vous déjà amusé à mesurer le nombre de lignes de code que représente l'extension TemplaVoila? Non, alors voilà les chiffres (mesurés avec la version 1.4.1) :

Code
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
PHP                             48           2984           6686          13808
XML                             23             36              0          10537
CSS                              2            167             19            828
Javascript                       2             16              4            108
SQL                              1             10              0             91
HTML                             2              0              0             37
-------------------------------------------------------------------------------
SUM:                            78           3213           6709          25409
-------------------------------------------------------------------------------


Oui, vous avez bien lu, plus de 25000 lignes de code, et pour faire quoi? un CMS complet? Non, un simple système de templating, ouah, ça c'est de l'efficacité, et ça laisse présager de la suite...

Il est d'ailleurs très amusant (voir hilarant) de constater que Dmitry Dulepov (le lead developper de TemplaVoilà) invoque la "Parabole des 2 programmeurs" dans son livre pour apprendre à programmer une extension


2. La structure de base de données de TemplaVoila est absolument inefficace :

Dans Typo3, les pages sont stockées dans la table "pages" et les contenus dans la page "tt_content", la liaison se faisant sur le champ pid (qui permet de savoir dans quelle page est stocké le contenu)
Lorsqu'on utilise le module "Pages" standard de Typo3, il est très simple de savoir dans quelle colonne se trouve un contenu, cela est indiqué dans le champ colPos.
Pour savoir si un contenu a été effacé, c'est simple également, il suffit de tester si le champ deleted de l'enregistrement est égal à 1.

Donc pour récupérer les contenus de la page 1, c'est assez simple (j'ignore certains champs techniques pour une meilleure compréhension) :
SELECT * FROM tt_content WHERE hidden=0 AND deleted=0 AND pid=1

Comment cela se passe maintenant avec TemplaVoilà?
Avec TemplaVoila, la position d'un contenu dans la page n'est pas portée par l'enregistrement du contenu lui même mais est stockée dans un champ de la table "pages" sous la forme d'un XML qui correspond à la Data Structure (DS) choisie pour la page (sur lequel il est donc impossible de faire la moindre requête).
De plus, quand vous supprimez un élément de contenu depuis l'interface de TemplaVoilà (et pas directement dans le formulaire d'édition de l'élément de contenu), l'élément n'est jamais marqué comme effacé dans la table tt_content, il est juste supprimé du XML stocké dans la table "pages" et apparait dans le back-office sous "Éléments non utilisés"

Donc concrètement, comment récupérer un élément de contenu d'une zone particulière? Et bien, cela se passe en 3 étapes :
- on récupère le contenu du XML dans la table pages
- on parse le XML afin de récupérer la liste des ids de contenu stockés dans la zone donnée
- on fait maintenant une requête similaire à la précédente sur la table tt_content en indiquant la liste des ids à récupérer

Efficace? Non, et encore vous n'avez rien vu


3. Il est impossible de faire une recherche dans la table tt_content avec TemplaVoilà :

Imaginez qu'un client vous demande de réaliser un petit module qui va recenser tous les éléments de contenu d'un type particulier utilisés sur le site (c'est du vécu).
Si vous utilisez le module pages standard de Typo3, c'est très simple et ça se passe en 2 étapes :
- on génère une liste d'id de pages afin de filtrer les contenus qui seraient stockés dans une page cachée ou effacée (on ne sait jamais)
- on fait cette simple requête SQL : SELECT * FROM tt_content WHERE CType='mon_type' AND hidden=0 AND deleted=0 AND pid IN('.$pid_list.')

Comment faire avec TemplaVoila?
Comme vu ci-dessus, un élément supprimé depuis l'interface de TemplaVoilà n'est pas marqué comme tel. Il est donc impossible de faire une simple requête pour récupérer tous les éléments de contenus visibles dans un site (ou même un page, une section, bref, nul part). Il va donc falloir mouiller la chemise (et affoler le CPU) :

Le cas simple, vous n'utilisez pas de FCE :
- on récupère la même liste que quand on utilise le mode "pages" comme vu ci-dessus
- on boucle sur chaque enregistrement (oups, ça se corse)
- pour chaque enregistrement, on récupère le pid le la page parent
- on récupére le XML stocké dans la page parent
- on parse chaque XML pour vérifier si le contenu est utilisé dans la page

Le cauchemard, vous utilisez des FCE :
je ne vais pas détailler la méthode mais sachez que si votre contenu est stocké dans un FCE, le FCE lui même n'est peut être pas utilisé dans la page, je vous laisse donc imaginer le nombre de boucles nécessaires pour vérifier ça...

NB : En théorie, on devrait pouvoir utiliser la table sys_refindex pour accélerer ces traitements, mais d'expérience, d'une part elle est rarement à jour, et de plus, je ne connais aucun programmeur qui sache vraiment l'utiliser.

Alors, TemplaVoilà, toujours aussi génial? oui? Bon ok, je continue


4. TemplaVoila rend la maintenance d'un site difficile

Bien conscient des problèmes évoqués ci-dessus, les développeurs de TemplaVoilà ont introduit un outil qui permet de nettoyer les éléments non utilisés.
Cet outil est lancé en ligne de commande via l'extension lowlevel :

php typo3/cli_dispatch.phpsh lowlevel_cleaner tx_templavoila_unusedce -s -r

Problème, la structure de la base est tellement alambiquée que lancer cet outil sur un site dont la volumétrie est importante est tout simplement impossible (c'est du vécu aussi), on a beau pousser le memory_limit et le set_time_limit à fond, et faire tous les réglages possibles et imaginables, le CPU s'emballe pendant de longues minutes et le script plante invariablement.

Enfin, peut-être n'ai je jamais eu de chance... Je continue?



5. TemplaVoila ne permet pas d'exploiter pleinement le Typoscript.

EDIT : Rakel a démontré avec un certain brio qu'il était possible de contourner le deuxième problème, donc le deuxième argument tombe et je le retire (même si honnêtement, je trouve la solution plus compliqué que la méthode classique, mais je m'incline).
Ne reste reste donc que le premier argument qui est toujours parfaitement valide sur le papier mais peut être contourné via l'utilisation d'une extension.

Il y a certaines fonctions Typoscript qui ne peuvent pas être utilisées conjointement avec TemplaVoilà, entres autres :

- La fonction "slide" :
Une fonction très pratique qui permet d'hériter des contenus de pages en pages. On peut par exemple poser un contenu sur la page d'accueil et en utilisant l'objet typoscript CONTENT conjointement avec la propriété slide=-1, il est hérité sur toutes les sous-pages (pratique pour un bandeau de pub par exemple).
Avec TemplaVoila, on est obligé d'utiliser une extension supplémentaire pour faire ça : kb_tv_contentslide

- Afficher un contenu de manière aléatoire :
Une astuce très pratique de l'objet CONTENT consiste à utiliser un orderBy = rand() afin de remonter un contenu au hasard (encore mon fameux bandeau de pub).
Problème, à ma connaissance, on ne peut pas utiliser l'objet CONTENT conjointement avec TemplaVoilà, on est obligé d'utiliser l'objet RECORDS, et cet objet ne permet pas de passer des paramètres spécifiques à la requête (logique puisqu'on lui passe directement un id d'enregistrement via la propriété current=1)

Et il y en a sans doute d'autres... Je continue ou vous avez déjà abandonné TemplaVoilà?


6. TemplaVoilà alourdit votre base de données :

Un petit test amusant à réaliser avec TemplaVoila :
- dupliquer la table "pages"
- supprimer les champs relatifs à TemplaVoilà sur la copie...

Tada, le poids de votre table "pages" sera divisé par 3 au minimum (sur la table que j'ai testé, avec un DS assez léger, le poids a été divisé par 4)
Encore un indice sur l'efficacité de la solution


7. TemplaVoilà est plus lent que d'autres méthodes de templating.

Je me suis amusé à prendre un site développé avec TemplaVoila et a re-mapper la page d'accueil avec un autre système de templating (Jetts pour ne pas le nommer) et les résultats sont intéréssants :
- Lorsque la page est déjà mise en cache, TemplaVoilà s'en sort et est à peine plus lent que Jetts (de l'ordre de quelques millisecondes)
- Lorsque la page n'est pas mise en cache, TemplaVoila s'avère 6% plus lent que Jetts, ce qui est un chiffre qui commence à devenir très intéressant dans le contexte où la page ne peut être mise en cache.

Il m'est arrivé par exemple pour un client de devoir générer une version HTML+PDF de toutes les pages d'un site (pour un système de cache statique assez complexe) toutes les nuits. Ce site faisait 6000 pages en 2 langues, ce qui nous fait en tout 24000 affichage de pages, et croyez moi, dans ce cas, on est bien contents de gagner 6% de temps...

Pour faire mes mesures, j'ai d'abord affiché la page 12 fois de suite en vidant le cache à chaque fois pour les 2 méthodes de templating, j'ai supprimé la mesure la plus élevée et la plus basse pour réduire les erreurs dûes à l'activité de mon ordinateur et j'ai fait la moyenne. Ensuite, j'ai répété l'opération sans vider le cache pour obtenir la deuxième série de résultats.



Il y a encore d'autres raison pour lesquelles vous devriez abandonner TemplaVoilà, ceci n'est pas une liste exhaustive et j'en ai encore quelques unes en tête (juste pour le fun, imaginez la galère si un client vous demandait d'exporter vos contenus vers un autre système avec tout ce xx de XML...)



Pour finir, tordons le cou à quelques idées reçues à propos de TemplaVoila :

- TemplaVoilà me fait gagner du temps :
juste pour info, il m'a fallu 30 minutes pour re-mapper complètement ma page de test avec Jetts, et il me faudrait ensuite quelques secondes pour créer autant de sous template que je le souhaite.
Vous pensez vraiment qu'avec TemplaVoilà vous auriez été plus vite? Il aurait fallu créer la DS, puis sans doute l'éditer à la main (ça finit toujours comme ça) et enfin se taper le mapping du TO, sans compter qu'il faut se taper un "update mapping" > "save and return" à chaque fois que vous faite une modif dans le template HTML (ce qui arrive souvent en début de projet). En même temps, si vous êtes un as des jeux vidéos et que vous avec une souris laser super précise, c'est possible wink.gif

- TemplaVoilà me permet de créer autant de zones que je le souhaite dans mon BE :
Un classique du rire, sachez seulement que :
- il suffit d'une ligne de TCA et une ligne de Typoscript pour ajouter une nouvelle colonne dans le BE standard
- même les plus gros sites sur lesquels j'ai travaillé (y compris le site d'Accor par exemple) n'ont jamais nécessité plus de 4 colonnes. L'erreur classique étant d'utiliser le BO pour placer des plugins qui ne sont jamais édités, cela bouffe de la place pour rien et perd votre contributeur. Si vous devez mettre un plugin de remontée de news sur votre site, injectez le directement en Typoscript que diable! Votre contributeur ne va pas le modifier tous les jours (en fait, il ne va jamais le modifier)

- TemplaVoila me permet de créer un BE qui ressemble au front :
Youpi... mais ça sert à quoi? Si vous voulez vraiment un BE qui ressemble au front, il serait temps de se tourner vers l'édition front-end, l'extension feeditadvanced en version 1.2 est maintenant assez stable.
Et puis... Vous avez déjà entendu parler des concepts de séparation du fond et de la forme? Vous savez, le fait que le fond est porté par le HTML et la forme par le CSS? Un BE qui ressemble au front, ne briserait-il pas ce concept? C'est le cas de TemplaVoilà, car si vous changez le front (le couple DS/TO dans TemplaVoilà), vos contenus se retrouvent perdu dans la nature (dans la fameuse case "éléments non utilisés"), dans TemplaVoilà, c'est la forme qui guide le fond, un comble!!! (ce point là, aurait pû être une des 7 raisons à part entière)


Allez y faites chauffer les Kalashnikovs, je suis prêt ;-)

Ce message a été modifié par duch - 10/03/2010, 11:15 .


--------------------
Go to the top of the page
 
+Quote Post

Les messages de ce sujet
- duch   7 Bonnes Raisons D'abandonner Templavoilà   22/02/2010, 10:11
- - Laogan   Moi j'ai pas envie de me lancer dans un débat ...   22/02/2010, 10:32
|- - friteuseb   Je plusoie sur le thème de l'accessibilité bac...   22/02/2010, 11:08
- - Popy   Trooolllliiiinnnnnng ! Perso, je retiens prin...   22/02/2010, 10:59
- - duch   Citation (Popy)Trooolllliiiinnnnnng ! ... On r...   22/02/2010, 11:03
- - duch   Citation (friteuseb)Autre chose aussi, pour un cli...   22/02/2010, 11:22
- - Popy   De toutes façons, à partir du moment ou c'est ...   22/02/2010, 11:23
|- - duch   Citation (Popy @ 22/02/2010, 11:23 ) De t...   22/02/2010, 11:31
- - team17   J'utilise TV depuis 5 bonnes années, après avo...   22/02/2010, 12:46
|- - Oom Paul   je suis d'accord avec Team17, merci Duch pour ...   22/02/2010, 13:00
- - Popy   'tain ça en deviens impossible de troller sur ...   22/02/2010, 14:03
- - duch   Je plussoie dans le sens de Team. Faites travaill...   22/02/2010, 14:28
|- - Oom Paul   de toute façon, le templating sur un CMS c'est...   22/02/2010, 15:11
|- - waloukern   En tant que petit scarabée sur TYPO3, et n'aya...   22/02/2010, 15:34
- - Popy   Je guette mes premiers cheveux blancs !   22/02/2010, 18:23
|- - Yucky   Pour n'être ni pro ni anti TV, je trouve que l...   23/02/2010, 08:43
|- - JunGle   Citation (Yucky @ 23/02/2010, 08:43 ) Pou...   05/03/2010, 11:38
- - Apen   Comme tout le monde ici, j'utilise TV que pour...   23/02/2010, 12:37
- - duch   Ouah! alors là les enfants je dois avouer que ...   23/02/2010, 17:05
|- - rakel   Citation (duch @ 23/02/2010, 17:05 ) Ouah...   23/02/2010, 17:14
- - Laogan   Ha je suis pas d'accord, on ne dis pas qu...   23/02/2010, 17:12
- - duch   Citation (Laogan @ 23/02/2010, 17:12 ) Ha...   23/02/2010, 17:25
|- - friteuseb   En fait pour moi c'est clairement la bonne mét...   23/02/2010, 19:13
|- - duch   Citation (friteuseb @ 23/02/2010, 19:13 )...   24/02/2010, 10:21
- - duch   Une 8ème bonne raison (enfin 10ème si on cherche e...   04/03/2010, 12:06
- - Popy   Ca pourrait être positif !   04/03/2010, 12:06
- - duch   Si ta seule et unique raison d'utiliser TV est...   05/03/2010, 11:45
|- - team17   Citation (duch @ 05/03/2010, 13:45 ) Si t...   05/03/2010, 11:55
|- - JunGle   Citation (duch @ 05/03/2010, 11:45 ) Si t...   05/03/2010, 12:01
||- - friteuseb   la vache, ça fait du bien de voir çe truc arriver ...   05/03/2010, 13:05
||- - Yucky   Citation (friteuseb @ 05/03/2010, 13:05 )...   05/03/2010, 16:25
||- - team17   Citation (Yucky @ 05/03/2010, 18:25 ) Cit...   05/03/2010, 16:37
||- - duch   Citation (Yucky @ 05/03/2010, 16:25 ) Cit...   05/03/2010, 16:44
|- - Yucky   Citation (duch @ 05/03/2010, 12:45 ) Si t...   02/04/2010, 12:57
- - Apen   Bon je me suis enfin décidé à utiliser jetts depui...   06/03/2010, 17:43
- - rakel   je n'ai pas encore eu le temps de tester jetts...   07/03/2010, 23:47
|- - Yucky   Je ne connaissais pas KB Nested Content Elements, ...   08/03/2010, 09:09
- - duch   Rakel, Je suis ravi et honoré que tu ai pris le t...   08/03/2010, 12:23
- - Popy   Moi, j'ia juste noté : CodeSELECT tt_content.*...   08/03/2010, 12:30
|- - duch   Citation (Popy @ 08/03/2010, 12:30 ) Moi,...   08/03/2010, 12:39
- - Popy   Certes, mais ce serait fort dommage de rater une o...   08/03/2010, 12:49
|- - rakel   Citation 1. TemplaVoilà est une usine à gaz" ...   08/03/2010, 13:50
- - Popy   @Rakel : c'est pas parce que tu est sublime qu...   08/03/2010, 13:55
|- - rakel   Citation (Popy @ 08/03/2010, 13:55 ) Sans...   08/03/2010, 14:03
- - Popy   "Mince, j'ai cliqué a coté"   08/03/2010, 14:13
- - duch   Citation (rakel)Non, tu n'auras certainement p...   08/03/2010, 14:31
- - Popy   Pourquoi personnes n'est vexé quand je troll ?...   08/03/2010, 17:38
|- - rakel   Citation (Duch)5. TemplaVoila ne permet pas d...   08/03/2010, 17:50
|- - Yucky   J'adore j'adore j'adore, vivement l...   08/03/2010, 18:05
- - Popy   Sauf que ton TS, il ne marche que s'il est le ...   08/03/2010, 18:04
|- - rakel   Citation (Popy @ 08/03/2010, 18:04 ) Sauf...   08/03/2010, 18:21
|- - friteuseb   Haha merci pour ce post Dutch, ça fait 20minutes q...   08/03/2010, 18:27
|- - duch   Citation (rakel @ 08/03/2010, 18:21 ) Cit...   08/03/2010, 19:33
|- - rakel   Citation (duch @ 08/03/2010, 19:33 ) je t...   08/03/2010, 21:18
|- - Oom Paul   bon, je vous propose un challenge à l'uni 2010...   09/03/2010, 09:30
|- - friteuseb   Et après le challenge, on passe les plateformes à ...   09/03/2010, 10:41
||- - Oom Paul   yes, mais il nous faut aussi le point de vue de co...   09/03/2010, 11:13
|- - duch   Citation (Oom Paul @ 09/03/2010, 09:30 ) ...   09/03/2010, 11:28
- - sproul   bonjour à tous, Je trouve ce sujet vraiment inter...   09/03/2010, 14:10
|- - Oom Paul   Bravo ! C'est effectivement l'objectif...   09/03/2010, 15:46
|- - duch   Citation (Oom Paul @ 09/03/2010, 15:46 ) ...   09/03/2010, 17:03
|- - rakel   Citation (duch)...je serais ravi si tu pouvais nou...   09/03/2010, 21:05
||- - duch   Citation (rakel @ 09/03/2010, 21:05 ) Cit...   10/03/2010, 10:25
||- - rakel   Citation (duch @ 10/03/2010, 10:25 ) Cita...   10/03/2010, 10:47
|- - team17   Citation (duch @ 09/03/2010, 18:03 ) Je n...   09/03/2010, 23:13
- - duch   ouaip, mais dans ton dernier code tu as omis (volo...   10/03/2010, 10:52
|- - rakel   Citation (duch @ 10/03/2010, 10:52 ) ouai...   10/03/2010, 10:56
- - duch   Ok, je corrige le point qui n'est pas impossib...   10/03/2010, 11:00
|- - rakel   Citation (duch @ 10/03/2010, 11:00 ) Ok, ...   10/03/2010, 11:09
- - duch   Voilà, plutôt que de supprimer le point complèteme...   10/03/2010, 11:17
|- - rakel   Citation (duch @ 10/03/2010, 11:17 ) Voil...   10/03/2010, 11:31
- - Popy   Rakel, tu m'expliquera comment tu saisi ...   11/03/2010, 11:42
|- - rakel   Citation (Popy @ 11/03/2010, 11:42 ) Rake...   11/03/2010, 12:29
- - duch   Cette extension se nomme modernbe, elle n'est ...   02/04/2010, 13:13
|- - Yucky   Citation (duch @ 02/04/2010, 14:13 ) Cett...   02/04/2010, 14:25
|- - Yucky   Mmmh trouvé, Pour les versions 4.2.x de Typo3 uti...   02/04/2010, 14:36
|- - Oom Paul   Citation (Yucky @ 02/04/2010, 13:36 ) Mmm...   02/04/2010, 15:07
|- - Yucky   Citation (Oom Paul @ 02/04/2010, 16:07 ) ...   06/04/2010, 07:44
- - Popy   @Rakel : Je sais que c'est le nom du champ dan...   06/04/2010, 10:26
|- - rakel   Citation (Popy @ 06/04/2010, 11:26 ) @Rak...   06/04/2010, 13:47
|- - rakel   réponse ci-dessous : (on utilise kb_tv_cont_slide...   08/04/2010, 14:33
- - duch   Je comprends mieux maintenant. Ok, ça marche, mai...   08/04/2010, 14:39
- - Julien Renier   - Si TV était aussi génial que ça, ça ferait longt...   09/04/2010, 15:18
- - Meta4 - CMD   Ça fait bien longtemps que je n'ai pas posté i...   27/05/2010, 10:59


Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 02/09/2010 - 23:40

> Canal IRC #typo3

utilisateur sont en train de parler sur le canal

IRC Users
Mode du canal



NB : Les utilisateurs connectés en mode invisible (+i) ne sont pas présents sur cette liste
@Opérateurs (op), %modérateurs (half-op), +membres réguliers (voice), visiteurs.

Design by: Invision Skins, HYIP Forum & Gad Lab