Changeset 104922 in spip-zone for _plugins_/compositions


Ignore:
Timestamp:
Jun 21, 2017, 3:49:10 PM (2 years ago)
Author:
cedric@…
Message:

Bugfix gros probleme de performance avec #COMPOSITION appele hors boucle :
le compilateur generait un appel de la forma compositions_determiner(objet_type(), @$Pile[0][], , false)
et la fonction compositions_determiner appelait alors la fonction trouver_table(
) ce qui provoque un cache des descriptifs des tables SQL
entrainant un fort taux de requetes du type SHOW CREATE TABLE (de l'ordre de 15 a 20% des requetes)

Location:
_plugins_/compositions/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/compositions/trunk/compositions_fonctions.php

    r100409 r104922  
    296296 */
    297297function compositions_determiner($type, $id, $serveur = '', $etoile = false) {
     298        // le compilateur produi(sait) des occurences de compositions_determiner('',...)
     299        // qui provoquent un appel a $trouver_table('')
     300        // qui vide le cache des descriptions SQL
     301        // evitons ce cas
     302        if (!$type) return '';
     303
    298304        static $composition = array();
    299305        $id = intval($id);
     
    419425function balise_COMPOSITION_dist($p) {
    420426        $_composition = '';
     427        $_objet = '';
    421428        if ($_objet = interprete_argument_balise(1, $p)) {
    422429                $_id_objet = interprete_argument_balise(2, $p);
    423430        } else {
    424431                $_composition = champ_sql('composition', $p);
    425                 $_id_objet = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
    426                 $_objet = "objet_type('" . $p->boucles[$p->id_boucle]->id_table . "')";
     432                if($p->id_boucle) {
     433                        $_id_objet = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
     434                        $_objet = "objet_type('" . $p->boucles[$p->id_boucle]->id_table . "')";
     435                }
    427436        }
    428437        // si on veut le champ brut, et qu'on l'a sous la main, inutile d'invoquer toute la machinerie
    429         if ($_composition and $p->etoile) {
     438        if ($_composition and (!$_objet or $p->etoile)) {
    430439                $p->code = $_composition;
    431440        } else {
  • _plugins_/compositions/trunk/paquet.xml

    r103720 r104922  
    22        prefix="compositions"
    33        categorie="outil"
    4         version="3.5.10"
     4        version="3.6.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.2.*]"
Note: See TracChangeset for help on using the changeset viewer.