Changeset 77124 in spip-zone


Ignore:
Timestamp:
Oct 10, 2013, 12:11:20 PM (8 years ago)
Author:
kent1@…
Message:

Grosse optimisation lors de la création d'un nouveau code de langue pour un module

Utilisation de sql_allfetsel + foreach plutot que sql_select + while + sql_fetch pour sélectionner

On ne sélectionne que les champs nécessaires

On insère avec sql_insertq_multi d'un coup l'ensemble plutot qu'une série plus ou moins longue de sql_insertq

Par exemple, sur la création du tibétain pour le module ecrire/ (très gros module) la version précédente tournait aux alentours de 190 secondes pour exécuter cette fonction. On est descendu en dessous de 30 maintenant.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/trad-lang/trunk/inc/tradlang_ajouter_code_langue.php

    r76979 r77124  
    1111 *
    1212 * @param array $module
    13  *              Les informations du module en base (on a besoin des champs "module","lang_mere")
     13 *              Les informations du module en base (on a besoin des champs "id_tradlang_module","module","lang_mere")
    1414 * @param string $lang
    1515 *              La langue dans laquelle on souhaite créer la nouvelle version
     
    1818        /**
    1919         * Sélection des chaînes de la langue mère du module
     20         *
     21         * On ne sélectionne que les champs qui seront définitivement insérés tels quel en base pour simplifier le tableau
    2022         */
    21         $chaines_mere = sql_select('*','spip_tradlangs',"module=".sql_quote($module['module'])." AND lang=".sql_quote($module['lang_mere']));
    22         $total = 0;
    23         while($chaine = sql_fetch($chaines_mere)){
     23        $chaines_mere = sql_allfetsel('str,id,comm','spip_tradlangs',"id_tradlang_module=".intval($module['id_tradlang_module'])." AND lang=".sql_quote($module['lang_mere']));
     24        $total = count($chaines_mere);
     25        $chaines_inserees = array();
     26        $date = date('Y-m-d H:i:s');
     27        foreach($chaines_mere as $id => $chaine){
    2428                /**
    25                  * Insertion en base :
     29                 * On ajoute une entrée au tableau $chaines_inserees qui insèrera toutes les chaînes d'un coup
    2630                 * - On crée un titre qui doit être unique
    2731                 * - On change la langue avec le $lang passé en paramètre
    28                  * - On vide les traducteurs
    2932                 * - On recrée le md5
    3033                 * - On met la date_modif à tout de suite
    3134                 * - On met langue_choisie à "oui"
    32                  * - On vire "maj" et "id_tradlang" qui sont des champs automatiquement incrémentés
     35                 * - les champs orig, statut, traducteur prennent les valeurs par défaut (0 et NEW), id_tradlang et maj sont incrémentés par mysql
    3336                 */
    34                 $chaine['titre'] = $chaine['id'].' : '.$chaine['module'].' - '.$lang;
     37                $chaine['id_tradlang_module'] = intval($module['id_tradlang_module']);
     38                $chaine['titre'] = $chaine['id'].' : '.$module['module'].' - '.$lang;
     39                $chaine['module'] = $module['module'];
    3540                $chaine['lang'] = $lang;
     41                $chaine['langue_choisie'] = 'oui';
    3642                $chaine['statut'] = 'NEW';
    37                 $chaine['orig'] = 0;
    38                 $chaine['traducteur'] = '';
    3943                $chaine['md5'] = md5($chaine['str']);
    40                 $chaine['date_modif'] = date('Y-m-d H:i:s');
    41                 $chaine['langue_choisie'] = 'oui';
    42                 unset($chaine['maj']);
    43                 unset($chaine['id_tradlang']);
    44                 $res = sql_insertq('spip_tradlangs',$chaine);
    45                 $total++;
     44                $chaine['date_modif'] = $date;
     45                $chaines_inserees[] = $chaine;
     46                unset($chaines_mere[$id]);
    4647        }
    47        
     48        if(intval($total) > 0)
     49                $res = sql_insertq_multi('spip_tradlangs',$chaines_inserees);
    4850        /**
    4951         * On génère le fichier correspondant si la configuration de tradlang le demande
Note: See TracChangeset for help on using the changeset viewer.