Bonjour David,

Lorsque c'es possible, je préfère éviter les caches : ils sont compliqués à gérer ; il suffit de pas grand chose (changement de contexte sur l'object, changement des champs de l'ordinateur ...) pour avoir des effets de bord indécelable immédiatement.

Je propose plutôt de charger l'ordinateur uniquement si les champs is_template et is_deleted ne sont pas dans le tableau $input (cf. patch joint). À charge pour FusionInventory de remplir correctement ces champs lorsqu'il fait le "add".

Autres développeurs GLPI, qn'en pensez-vous ?

Dans la série des optimisations : tu dois également définir l'entrée "entities_id" dans le tableau fournit au add. Sinon, CommonDBRelation::addNeededInfoToInput() chargera le Computer pour récupérer son entitée.

Damien
On 05/12/2012 15:34, David DURIEUX wrote:
Pour un inventaire fusion, j'ajoute plusieurs logiciels au meme pc et
donc fait plusieurs computer_softwareversion->add().

Ce patch permet de mettre en cache les infos du pc pour is_template et
is_deleted

Gain de 8% (ca evite le getFromDB xx fois)

merci d'avance

David Durieux
++


_______________________________________________
Glpi-dev mailing list
[email protected]
https://mail.gna.org/listinfo/glpi-dev

Index: inc/computer_softwareversion.class.php
===================================================================
--- inc/computer_softwareversion.class.php	(revision 19807)
+++ inc/computer_softwareversion.class.php	(working copy)
@@ -63,11 +63,17 @@
 
    function prepareInputForAdd($input) {
 
-      // Get template and deleted information from computer
-      $computer = new Computer();
-      if ($computer->getFromDB($input['computers_id'])) {
-         $input['is_template'] = $computer->getField('is_template');
-         $input['is_deleted']  = $computer->getField('is_deleted');
+      if ((!isset($input['is_template']))
+          || (!isset($input['is_deleted']))) {
+         // Get template and deleted information from computer
+         // If computer set update is_template / is_deleted infos to ensure data validity
+         if (isset($input['computers_id'])) {
+            $computer = new Computer();
+            if ($computer->getFromDB($input['computers_id'])) {
+               $input['is_template'] = $computer->getField('is_template');
+               $input['is_deleted']  = $computer->getField('is_deleted');
+            }
+         }
       }
       return parent::prepareInputForAdd($input);
    }
@@ -78,13 +84,16 @@
    **/
    function prepareInputForUpdate($input) {
 
-      // If computer set update is_template / is_deleted infos to ensure data validity
-      if (isset($input['computers_id'])) {
-         // Get template and deleted information from computer
-         $computer = new Computer();
-         if ($computer->getFromDB($input['computers_id'])) {
-            $input['is_template'] = $computer->getField('is_template');
-            $input['is_deleted']  = $computer->getField('is_deleted');
+      if ((!isset($input['is_template']))
+          || (!isset($input['is_deleted']))) {
+         // If computer set update is_template / is_deleted infos to ensure data validity
+         if (isset($input['computers_id'])) {
+            // Get template and deleted information from computer
+            $computer = new Computer();
+            if ($computer->getFromDB($input['computers_id'])) {
+               $input['is_template'] = $computer->getField('is_template');
+               $input['is_deleted']  = $computer->getField('is_deleted');
+            }
          }
       }
       return parent::prepareInputForUpdate($input);
_______________________________________________
Glpi-dev mailing list
[email protected]
https://mail.gna.org/listinfo/glpi-dev

Reply via email to