SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

290 Plugins, 198 contribs sur SPIP-Zone, 68 visiteurs en ce moment

Accueil > Optimisation et performances > Utilisation de la balise #SESSION et optimisation

Utilisation de la balise #SESSION et optimisation

29 novembre 2017 – par Peetdu – commentaires

10 votes

Lorsque une page utilise #SESSION, #AUTORISER, (il y en a d’autres), SPIP va créer un cache différent par session (par utilisateur).
L’objet de cet article est de vous montrer comment optimiser l’utilisation de cette balise.

Compréhension

Dans la documentation sur la balise #SESSION, on peut lire :

#SESSION, permet d’accéder aux informations liées au visiteur authentifié et de différencier automatiquement le cache en fonction du visiteur.

En d’autres termes, si votre squelette utilise la balise #SESSION, un internaute authentifié visitant la page correspondante sera servi non pas par le cache courant mais par un cache dédié à sa session.

Utilisateur authentifié : deux caches en fonction du contenu du squelette

En jaune : les pages servies par le cache courant ;
En gris : les pages créées par des squelettes utilisant #SESSION et donc servies par un cache dédié.

Cela a deux conséquences :

  1. Un visiteur authentifié va avoir une navigation moins fluide (rapide) ;
  2. l’ensemble des caches (courant + dédiés) va prendre un espace plus important sur le disque du serveur.

Cet article montre au travers de deux études de cas comment minimiser ces inconvénients grâce aux inclusions et à un peu d’astuce.

Étude de cas #1 : inclusion simple

Objectif : si le visiteur est authentifié, afficher son nom sur la page d’accueil.

Voici le code SPIP non optimisé de cette page

  1.  …
  2.  <h1> Fonk is all</h1>
  3. [<div class='nom_visiteur'>Welcome (#SESSION{nom})</div>]
  4. <p>Funk is a music genre that originated in the mid to late 60s…</p>
  5. <div class='footer'>© Adelic</div>

Télécharger

puis le code optimisé

  1. <h1> Fonk is all</h1>
  2. <INCLURE{fond=inclure/nom_visiteur}>
  3. <p>Funk is a music genre that originated in the mid to late 60s…</p>
  4. <div class='footer'>© Adelic</div>

Télécharger

avec le code de l’inclure (inclure/nom_visiteur.html)

  1. [<div class='nom_visiteur'>Welcome (#SESSION{nom})</div>]

Résultat, seul le fichier inclure/nom_visiteur.html sera mis en cache dédié au visiteur « Bootsy Collins ».

Ainsi la page d’accueil de ce site est bien du type

On voit ici que SPIP utilise les deux caches pour servir la page : la plus grande partie de cette page est déjà construite via le cache courant. Seule la partie contenant des informations de session est mise dans le cache dédié.

Étude de cas #2 : afficher un contenu via une boucle

Objectif : Pour les utilisateurs authentifiés, afficher un bloc avec un agenda listant les 2 prochains événements.

Dans le squelette

  1. [(#SESSION{statut}|in_array{#LISTE{0minirezo,1comite,6forum}}|oui)
  2.         <INCLURE{fond=inclure/prochains_concerts}>
  3. ]

Télécharger

..faire plutôt

  1. <INCLURE{fond=inclure/prochains_concerts}>

et dans l’inclusion, faire le test de session...

  1. [(#SESSION{statut}|in_array{#LISTE{0minirezo,1comite,6forum}}|oui)
  2. <BOUCLE_concerts(EVENEMENTS){a_venir}{0,2}>
  3.   <div><strong>#TITRE</strong></div>
  4.   <div>le #DATE_DEBUT au #LIEU</div>
  5. </BOUCLE_prochains_concerts>
  6. ]

Télécharger

Mais ce code ne fonctionne pas avec le langage de SPIP. Il n’est pas possible de mettre une boucle dans une balise [1].

Le critère Si… à la rescousse

…grâce auquel on pourra mettre le test de SESSION dans les critères de la boucle.

  1. <BOUCLE_concerts(EVENEMENTS){a_venir}{0,2}{si #SESSION{statut}|oui}>
  2.   <div><strong>#TITRE</strong></div>
  3.   <div>le #DATE_DEBUT au #LIEU</div>
  4. </BOUCLE_prochains_concerts>

Télécharger

Résultat : on retrouve le même partage du cache que dans le cas précédent.

Pour aller plus loin

Article (très) complémentaire
Du php dans le squelette à la place de #SESSION ou #CACHE

Le plugin Zcore (anciennement zpip)
Zcore propose de construire votre site en créant une pyramide d’inclusions. L’utilisation de ce plugin est déjà en soit une bonne pratique. On comprend qu’elle devient très recommandable pour des sites avec des utilisateurs connectés.

-  Le plugin
-  La doc officielle
-  Un tuto bien utile pour démarrer avec Zcore

Avec un peu de pratique, cela fait gagner un temps fou.

Le plugin Mémoïzation
Gestion du cache de SPIP par diverses méthodes.

Fil : « Utiliser memoization et memcache sera déjà mieux que le cache standard sur filesystem. »
Voir Memoization

Le plugin XRay
Explorer les caches SPIP avec memoization par APC
XRay

Le plugin Macrosession
Le plugin Macrosession propose des balises qui facilitent les recommandations de l’article Du php dans le squelette à la place de #SESSION ou #CACHE 0 et qui définissent des macro php pour SPIP, pour les cas les plus courant d’utilisation.

Notes

[1Voir à ce propos la page Affichage conditionnel

Dernière modification de cette page le 13 janvier 2018

Retour en haut de la page

Vos commentaires

  • Le 29 novembre 2017 à 12:54, par RastaPopoulos En réponse à : Utilisation de la balise #SESSION et optimisation

    Yo,
    super pour aiguiller les gens vers la bonne pratique. :)

    Pour la dernière partie, quel est l’intérêt de proposer l’option « faire une deuxième inclusion », alors qu’au final il y a le critère « si » qui est mieux juste après et qui est la vraie recommandation (puisque pas besoin d’un squelette et donc d’un cache en plus). Ça perd inutilement non ?

    Pour moi les deux options sont :
    -  soit le critère « si » directement sur la boucle voulue
    -  soit une boucle (CONDITION) autour de l’ensemble, surtout si on a plusieurs boucles à y mettre (évite d’avoir un test par boucle).
    Mais jamais la double inclusion.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Acces Restreint 3.0

    11 décembre 2008 – 836 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

  • Champs Extras 3

    16 janvier 2012 – 646 commentaires

    Ce plugin permet de créer et/ou de gérer des champs supplémentaires dans les objets éditoriaux de SPIP. Il permet donc de prendre en compte et d’afficher de nouveaux éléments dans n’importe quel objet éditorial de SPIP. Screencast Vous n’aimez pas (...)

  • Export Spip vers Wordpress

    11 mai 2013 – 35 commentaires

    Problématique On souhaite migrer un site spip vers un site wordpress. Si seul le contenu des articles nous intéresse, on peut très bien utiliser un des plugins de Wordpress permettant d’importer un flux rss, ce flux rss étant créé par Spip. Cette (...)

  • LIM : alléger l’espace privé

    20 avril 2015 – 47 commentaires

    Ce plugin permet de désactiver l’affichage de blocs ou de boutons, présents par défaut dans SPIP mais qui peuvent devenir inutiles dans le cadre de votre projet. Il allège du coup l’interface d’édition et supprime d’éventuels risques de confusion dans (...)

  • Partageur

    29 janvier 2011 – 52 commentaires

    Permet de recopier facilement des articles d’un site SPIP partageur à l’autre. Présentation Ce plugin est né d’un besoin de partager des articles entre sites SPIP. Contrairement aux plugins SPIP2SPIP, Flux RSS en articles le principe d’import (...)