Changeset 90535 in spip-zone


Ignore:
Timestamp:
Jun 26, 2015, 9:05:08 AM (6 years ago)
Author:
cedric@…
Message:

Perf issue : la fonction paniers_id_panier_encours() utilise le id_panier en session si dispo avant tout, car il evite de faire une requete SQL.
Sinon on regarde cookie+id_auteur, et on resynchronise cookie et id_panier en session si besoin, pour les hits suivants.
Partout on remplace les appels a session_get(id_panier) par un appel a paniers_id_panier_encours() qui est la reference et evite de presumer sa methode de stockage
Est-ce qu'il faudrait aussi une balise #ID_PANIER_EN_COURS pour remplacer #SESSION{id_panier} ?
On passe le plugin en test

Location:
_plugins_/paniers/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/paniers/trunk/action/remplir_panier.php

    r90526 r90535  
    2020       
    2121        // Il faut cherche le panier du visiteur en cours
    22         include_spip('inc/session');
     22        include_spip('inc/paniers');
    2323        $id_panier_base = 0;
    24         if ($id_panier = session_get('id_panier')){
     24        if ($id_panier = paniers_id_panier_encours()){
    2525                //est-ce que le panier est bien en base
    2626                $id_panier_base = intval(sql_getfetsel(
  • _plugins_/paniers/trunk/action/supprimer_panier.php

    r90528 r90535  
    2222                // supprimer le panier de la session si c'est le meme
    2323                // ca permet potentiellement de retrouver une session vide (perf issue)
    24                 include_spip('inc/session');
    25                 if ($id_panier==session_get('id_panier')){
    26                         include_spip('inc/paniers');
     24                include_spip('inc/paniers');
     25                if ($id_panier==paniers_id_panier_encours()){
    2726                        paniers_supprimer_panier_en_cours();
    2827                }
  • _plugins_/paniers/trunk/formulaires/panier.php

    r90520 r90535  
    66
    77function formulaires_panier_charger($id_panier=0){
    8         include_spip('inc/session');
    9        
    10         // On commence par chercher le panier du visiteur actuel s'il n'est pas donné
    11         if (!$id_panier) $id_panier = session_get('id_panier');
     8
     9        // On commence par chercher le panier du visiteur actuel s'il n'est pas fourni a l'appel du formulaire
     10        include_spip('inc/paniers');
     11        if (!$id_panier) $id_panier = paniers_id_panier_encours();
    1212       
    1313        $contexte = array(
     
    4141
    4242function formulaires_panier_traiter($id_panier=0){
    43         include_spip('inc/session');
    4443        $retours = array();
    4544       
    46         // On commence par chercher le panier du visiteur actuel s'il n'est pas donné
    47         if (!$id_panier) $id_panier = session_get('id_panier');
     45        // On commence par chercher le panier du visiteur actuel s'il n'est pas fourni a l'appel du formulaire
     46        include_spip('inc/paniers');
     47        if (!$id_panier) $id_panier = paniers_id_panier_encours();
    4848
    4949        if (_request('vider')){
  • _plugins_/paniers/trunk/inc/paniers.php

    r90527 r90535  
    1313        // Si on a déjà fait les calculs, on termine déjà
    1414        if ($id_panier > 0) return $id_panier;
     15
     16        // si rien en cookie ni session, rien a faire (perf issue visiteurs anonymes)
     17        if (!(isset($_COOKIE[$GLOBALS['cookie_prefix'].'_panier'])
     18          OR (isset($GLOBALS['visiteur_session']['id_panier']) AND $GLOBALS['visiteur_session']['id_panier'])
     19          OR (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']))){
     20                return $id_panier;
     21        }
     22
    1523       
    1624        $id_panier = 0;
    17         $id_auteur = (isset($GLOBALS['visiteur_session']['id_auteur']) AND $GLOBALS['visiteur_session']['id_auteur']) ? $GLOBALS['visiteur_session']['id_auteur'] : 0;
     25
     26        // le session id_panier est toujours pose d'apres le cookie, donc si il est la on peut s'y fier
     27        // c'est plus rapide
     28        if (isset($GLOBALS['visiteur_session']['id_panier']) AND $id_panier=intval($GLOBALS['visiteur_session']['id_panier'])){
     29                return $id_panier;
     30        }
     31
     32        // sinon on regarde le cookie
    1833        $nom_cookie = $GLOBALS['cookie_prefix'].'_panier';
    1934        $cookie = isset($_COOKIE[$nom_cookie]) ? $_COOKIE[$nom_cookie] : null;
     
    3146                ));
    3247        }
    33        
    34         // S'il n'y a pas de panier avec le cookie, on regarde s'il y a un auteur connecté et un panier qui lui est lié
     48
     49        // S'il n'y a pas de panier avec le cookie, on regarde si le visiteur est identifie
     50        // et si un panier est lié a son id_auteur
    3551        if (!$id_panier
    36                 and $id_auteur
    37           and include_spip('base/abstract_sql')
    38                 and $panier = sql_fetsel(
     52                AND isset($GLOBALS['visiteur_session']['id_auteur'])
     53                AND $id_auteur=intval($GLOBALS['visiteur_session']['id_auteur'])
     54          AND include_spip('base/abstract_sql')
     55                AND $panier = sql_fetsel(
    3956                        'id_panier, cookie, date',
    4057                        'spip_paniers',
     
    4663                        'date desc',
    4764                        '0,1'
    48                 )
    49         ){
     65                )){
    5066                $date = $panier['date'];
    5167                $cookie = $panier['cookie'];
     
    6278               
    6379        // Si on a bien un panier et un cookie à la fin
     80        // synchroniser cookie et id_auteur en session
    6481        if ($id_panier > 0 and $cookie){
    6582                if (!function_exists('lire_config'))
     
    7693                }
    7794        }
    78         // Sinon on vide le cookie et la session si besoin
     95        // Sinon on vide le cookie et la session si besoin => evite un appel a cette fonction au prochain hit
    7996        else{
    8097                paniers_supprimer_panier_en_cours();
     
    141158}
    142159
    143 ?>
  • _plugins_/paniers/trunk/paquet.xml

    r90521 r90535  
    22        prefix="paniers"
    33        categorie="divers"
    4         version="1.0.3"
    5         etat="dev"
     4        version="1.0.4"
     5        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
    77        logo="prive/themes/spip/images/paniers-32.png"
Note: See TracChangeset for help on using the changeset viewer.