IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Templates] Système de cache


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut [Templates] Système de cache
    Bonjour,
    Alors voici le jeu:
    Je vais vous expliquer un truc, et si j'ai tord, corrigez moi :

    1. Beaucoup de moteurs de template propose un "système de cache".
    2. Ce système prend du meta-code propre au template et le converti en code PHP tout à fait banal pour une exécution future plus rapide.
    3. Le meta-code est présent car on se dit que la personne chargée de l'intégration pourrait être différente de le programmeur PHP.
    4. L'intégrateur pourrait être malveillant, et placer du code PHP dangereux ou non-souhaité dans le template, et ainsi causer des domages ou voler des données.


    Mais:
    3. si il n'y a pas d'intégrateur distinct des programmeurs PHP; on a pas besoin de méta-langage.
    2. Si on a pas besoin de méta-language; on a pas besoin de cache.
    1. Et si on a pas besoin de cache:

    Nos instruction de template seront du PHP pur de toute facon, et ca sera tout comme si s'était déjà "compilé", à ceci près:
    - qu'on utilise un unique language
    - qu'on est aucunement limité par le meta-language
    - qu'il n'y a plus besoin de faire de checksum et autre controle pour charger un template.


    Bref, la règle du "séparer le PHP du HTML" à t'elle été mal comprise ?
    Se pourrait-il que beaucoup de gens confondent "langage" et "utilisation" ?
    La règle devrait être: "Séparrer le traitement de la représentation", non ?


    Alors si jusqu'ici j'ai raison, pourquoi diable est-ce que 90% des gens qui code des projets de facon autonome (seul) ne se font-ils pas confiance au point d'utiliser un système sur-complexe gérant un méta-language distinct et un système de cache ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2002
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 119
    Points : 68
    Points
    68
    Par défaut
    je suis d'accord avec toi.
    C'est pour cela que j'utilise Zend_View ( http://framework.zend.com/manual/fr/...roduction.html ).

  3. #3
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    J'ai peut être mal saisie le problème que tu pose, mais je ne vois aucun rapport avec le cache, mais une question sur l'intérêt de certains système de template.

    S'il s'agit bien de cache, de quel type de cache fait tu allusion ?
    2. Ce système prend du meta-code propre au template et le converti en code PHP tout à fait banal pour une exécution future plus rapide.
    A mon avis un système de template propose un meta-code qui sera interprété par un code Php (propre au moteur de template) qui le convertira en HTML (et non en Php).


    Bref, la règle du "séparer le PHP du HTML" à t'elle été mal comprise ?
    Se pourrait-il que beaucoup de gens confondent "langage" et "utilisation" ?
    La règle devrait être: "Séparrer le traitement de la représentation", non ?
    J'ai l'impression que tu évoque un CMS, qui eux souvent intègre tout, soit toute ce que doit faire l'application, et un moteur de template.

    Si on se tient uniquement à un moteur de template, un intégrateur sera obligatoire, car c'est lui qui programmera l'application, et donc la structurer en séparant les traitements et l'interface.
    Au bout, le graphiste par exemple aura uniquement à se préoccuper des fichiers templates, et d'intégrer les meta-code là où c'est nécessaire.

    En somme, un moteur de template brut ne fait pas grand chose, c'est comme un FrameWork en quelque sorte, faudra quand même programmer l'application.


    Pas sûr d'avoir bien saisie ton problème.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #4
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Je ne parle pas des CMS, mais bien des systèmes de templates:
    - Smarty,
    - Dwoo
    - Flexy
    - etc...

    La majorité des systèmes de templates font appel à un système de cache. Mon point est que ces systèmes de cache servent uniquement à palier à l'inconvéniant principal de l'utilisation d'un meta-langage: la conversion du meta langage en code PHP.

    Mais est-ce vraiment pertinent ?


    N'est-ce pas plus performant d'utiliser directement du vrai de vrai code PHP ? (si la sécurité des templates n'est pas à mettre en cause)



    ---

    Edit:
    Zend_View (Comme solar_view), c'est bien basé sur le système de template Savant3 il me semble...

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    La majorité des systèmes de templates font appel à un système de cache. Mon point est que ces systèmes de cache servent uniquement à palier à l'inconvéniant principal de l'utilisation d'un meta-langage: la conversion du meta langage en code PHP.

    Mais est-ce vraiment pertinent ?


    N'est-ce pas plus performant d'utiliser directement du vrai de vrai code PHP ? (si la sécurité des templates n'est pas à mettre en cause)
    Je ne vois toujours pas le rapport avec le cache ?

    Tu évoque smarty, et il ne me semble pas que celui ci transforme le meta-langage en code Php, il me semble qu'il l'interprète (le parse) pour le transformer en HTML.
    Ensuite, s'il y a un système de cache, ce cache sera du HTML, et c'est là où ça devient performant.


    Si on utilise directement du php et que son application est dépourvu d'un système de cache, alors on peu dire qu'on sera moins performant.

    Maintenant, est ce qu'il est facile de coder directe en php tout en conservant le système de cache du template, alors là, j'en sais rien.
    Ca doit dépendre du type de template, et surtout la bonne connaissance du template.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Donc, je comprend que tu me dis que ce n'est pas vrai lorsque j'affirme que les systèmes de cache convertissent les templates en version PHP, mais que c'est plutot en version HTML.

    Dans ce cas, comment un système de cache peut-il être efficace si, sur une page, on affiche des données dynamiques (c'est un peu l'intérêt de PHP quand même, sinon on ferait les sites directement en HTML). Par exemple quel serait l'intérêt d'un cache HTML pour le système forum de developpez.net ? Le code HTML change tout le temps...

    Note: J'essaie vraiment juste de bien comprendre...

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je n'affirme rien, j'essai juste de comprendre ce qui te pose problème.

    Les systèmes de caches sont nombreux, et il est certain que je ne les connais pas tous, déjà.

    Mais il est certain que parmi des systèmes de cache, ils y en a qui génèrent du HTML.
    Le système peut être très simple :
    On fixe une date d'expiration (genre 24heures), et si quelqu'un demande cette page et quelle existe bien est que la date en court est inférieur à 24 heures, alors c'est le cache qui sera récupéré et renvoyé.
    Si on demande cette même page et que la date est expirée, alors cette fois les données seront récupérées dans la Bdd (donc requête SQL), ensuite, on génère le HTML qui après sera renvoyé.

    Le but principal ici c'est de soulager la Bdd, quelle soit moins sollicitée, car un site ayant un gros trafique, trop de requêtes peut être un énorme handicap.
    De plus, ça fait toujours des traitements en moins, car un contenu HTML déjà existant sera plus performant qu'une page dynamique avec plein de code Php.
    D'ailleurs, c'est un des inconvénients principal des moteurs de template, car en fin de compte, il y a une double interprétation du code.
    Le 1er, c'est le code Php du template, et le second, le meta-code que le template parsera pour générer le HTML.


    Une autre technique consisterait à générer le HTML uniquement en cas de création, un article par exemple, ou une mise à jour d'un article.
    C'est le cache qui sera alors à chaque fois renvoyé.


    Imagine un site comme le Times, ou autre quotidien, et bien une fois que l'édition du jour est éditée, normalement elle ne sera plus modifiée (ou alors c'est très rare).
    Quel intérêt il y a t-il de faire des tonnes de traitements pour récupérer un contenu qui se modifierait presque jamais ?
    Il y en a très peu. On peu donc très largement miser sur un système de cache.
    Par contre, le contenu devra quand même être dans une Bdd car il faut conserver le moyen de faire des recherches.
    Donc au final le contenu est quelque part dupliqué : Bdd + HTML.

    Pour ce qui est du système de template, il peut être ici très intéressant dans la mesure ou la mise en page doit être très souple, et non figée, particulièrement pour la Une.
    Un système de template ici peut être une bonne solution.


    En tout cas, ce forum contient un système de cache, c'est une certitude, et ça se remarque si on y prête attention.
    Par contre, le code HTML ne change pas tout le temps, il change que si une mise à jour ou insertion est effectuée, et ceci peu se gérer avec un cache.
    Par contre, ce forum et son système est certainement très évolué, et le cache ne doit pas être totalement du HTML, mais un mélange.
    Donc c'est vrai qu'il peu avoir du Php mélangé au HTML mis en cache.
    De même qu'il est vrai qu'on peu aussi générer que du Php en cache.
    En faite, tout est fait pour diminuer les traitements, comme les requêtes SQL.
    Puis ce n'est pas tout qui est en cache, mais surement des morceaux, des briques par ci par là, et il doit avoir plusieurs façon de les générer, de même être sous des formes différentes (html brut, html mélangé, xml, etc ...).


    Mise à par ça, je partage tout de même ton sentiment, qu'un système de template n'est pas obligatoirement la meilleure solution, et que peut être certains les utilisent à tord.
    De mon coté d'ailleurs, j'en vois pas l'utilité, je mise plutôt comme tu le dis sur la structure.
    Par contre, un système de cache peu très fortement augmenter les performances. Ou dit autrement, le coté très dynamique (voir trop) peu avoir des effets désastreux.
    Mais ces 2 aspects (template/cache) n'ont aucun rapport, c'est juste que l'un complète l'autre, ou plutôt que l'un comble les défauts de l'autre.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    @RunCodePhp

    FMaz parle de mettre en cache les instructions php résultant de la transformation d'un fichier de template. La template se trouve dans une forme intermédiaire qui est du pur php. On peut dès lors sauvegarder cette forme intermédiaire pour accélérer les rendus ultérieurs.

    On dira de tels systèmes qu'ils "compilent" les templates plutôt qu'ils ne les "interprètent". La phase d'interprétation qui génère le html final est laissée au moteur php lui-même.

    Mettre en cache la forme intermédiaire php ne sert qu'à accélérer les traitements: on saute l'étape de "compilation".

    @FMaz

    Ton raisonnement initial se tient. Dans l'ensemble je partage ton avis.
    Mais il faut reconnaitre qu'il y a des cas où on ne peut se permettre de laisser un "graphiste" ou un simple utilisateur en bout de chaîne agencer sa template et la donner à l'interprèteur php sans aucun garde-fous. Parce que c'est de ça dont il est question avant même des considérations philosophiques de stricte séparation entre la logique métier et celle de présentation.
    php ne possèdent pas de mode "sandbox" qui permettrait d'évaluer un fichier et récupérer toutes les erreurs, même fatales, sans que le processus principal ne soit interrompu.

    Les moteurs de template qui ont un système de cache ont donc par définition une phase de compilation (transformation) en php. Les malformations et erreurs potentiellement fatales peuvent être détectées en amont. La transformation pourra être interrompue, mais pas toute l'application.

Discussions similaires

  1. [VTemplate] Comment utiliser le système de cache ?
    Par xhark dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/10/2006, 00h37
  2. Réponses: 4
    Dernier message: 12/10/2006, 23h56
  3. [COMPOSANT] Système de cache pour asp ?
    Par tom_92 dans le forum ASP
    Réponses: 1
    Dernier message: 12/04/2006, 12h05
  4. [Smarty] système de cache
    Par mohican13 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/02/2006, 10h05
  5. [PEAR] Système de cache jpcache: questions
    Par Cyrius dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 23/12/2005, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo