juil 28

Un backoffice Magento lent à charger


Il existe deux ou trois cas différents au moins où le backoffice de Magento peut être très lent à charger. En 0.9.6 il manquait un index dans une table, en 1.1.6 il y avait un autre soucis et nous sommes tombés récemment sur un os en version 1.2, 1.3 et +.

Le bug est lié aux règles qui sont implémentées dans le catalogue. Avoir une règle spécifique , par exemple une réduction sur une catégorie, peut rendre le chargement du backoffice très lent. (horriblement lent en fait)

Rappelons en plus que le Flat Catalog, qui améliore les performances (d’environ 20% sur une 1.3), ne s’applique qu’au front, le backoffice lui est toujours obligé d’utiliser le modèle EAV.

D’habitude Wikigento ne touche que rarement au code sauf pour des raisons de performances ou de sécurité mais ici la nuance est assez fine vu qu’il s’agit bien d’optimiser les performances de Magento mais en patchant le code… Bref, on l’a donc on le diffuse !

Référence du Bug


NBS System a déclaré ce bug à Varien pour plusieurs de ses clients. Il est probable que d’autres magasins, hébergeurs, développeurs aient le problème, voici donc ce patch, en attendant que ceci soit intégré au code source de Magento (ce qui n’est pas le cas pour le moment)

Le bug est référencé sous le numéro et la description suivante chez Varien :
[#VQR-617032] : « Catalog price rules problem »

Il semble que ce patch améliore un peu les choses sans tout résoudre cependant.  (Nous réouvrirons le ticket si les performances ne sont pas  suffisantes)

Patcher son Magento


Attention, ce patch est conçu pour la version 1.2.1 de Magento.

Sur d’autres versions, vous aurez probablement à l’adapter. Plus précisément il est fait pour une version 0.13 de Mage_Weee (soit une révision N° 44593 des fichiers).

Il est assez simple à lire et à comprendre et donc à adapter. Cependant si vous l’adaptez pour une autre version ou si vous l’améliorez, vous devez le renvoyer à Varien (ou à moi, je le ferai parvenir à la bonne personne) puisque ce patch est en OSL 3. (Opensource Licence 3)

1°) Copiez le fichier sur le serveur (ftp ou scp) ou copier/coller le contenu de cette codebox dans un fichier :
cat > weee_discount_optimize_sm70_121.patch
CTRL+C sur la codebox puis boutonde droite de la souris dans un putty
CTRL+D dans le putty)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
Index: app/code/core/Mage/Weee/etc/config.xml
===================================================================
--- app/code/core/Mage/Weee/etc/config.xml	(revision 44593)
+++ app/code/core/Mage/Weee/etc/config.xml	(working copy)
@@ -28,7 +28,7 @@
 <config>
     <modules>
         <Mage_Weee>
-            <version>0.13</version>
+            <version>0.14</version>
         </Mage_Weee>
     </modules>
 
@@ -297,4 +297,4 @@
              </updates>
         </layout>
     </frontend>
-</config>
\ No newline at end of file
+</config>
Index: app/code/core/Mage/Weee/Model/Mysql4/Tax.php
===================================================================
--- app/code/core/Mage/Weee/Model/Mysql4/Tax.php	(revision 44593)
+++ app/code/core/Mage/Weee/Model/Mysql4/Tax.php	(working copy)
@@ -14,17 +14,44 @@
     {
         return $this->_getReadAdapter()->fetchCol($select);
     }
-
+
     public function updateDiscountPercents()
     {
-        $this->_getWriteAdapter()->delete($this->getTable('weee/discount'));
+		return $this->_updateDiscountPercents();
+    }
+
+    public function updateDiscountPercentsByPCondition($productCondition)
+    {
+    	return $this->_updateDiscountPercents($productCondition);
+    }
+
+    protected function _updateDiscountPercents($productCondition=null)
+    {
+        if (is_null($productCondition)) {
+            $this->_getWriteAdapter()->delete($this->getTable('weee/discount'));
+        } else {
+            $this->_getWriteAdapter()->delete($this->getTable('weee/discount'),
+                $this->_getReadAdapter()->quoteInto('entity_id in (?)',
+                    $this->_getReadAdapter()->fetchCol($productCondition->getIdsSelect($this->_getReadAdapter()))
+                )
+            );
+        }
+
         $now = strtotime(now());
 
         $select = $this->_getReadAdapter()->select();
-        $select->from(array('data'=>$this->getTable('catalogrule/rule_product')))
-            ->where('(from_time <= ? OR from_time = 0)', $now) -            ->where('(to_time >= ? OR to_time = 0)', $now)
-            ->order(array('data.website_id', 'data.customer_group_id', 'data.product_id', 'data.sort_order'));
+        $select->from(array('data'=>$this->getTable('catalogrule/rule_product')));
+
+        if (is_null($productCondition)) {
+            $select->where('(from_time <= ? OR from_time = 0)', $now); +            $select->where('(to_time >= ? OR to_time = 0)', $now);
+        } else {
+            $select->where('product_id in (?)',
+                $this->_getReadAdapter()->fetchCol($productCondition->getIdsSelect($this->_getReadAdapter()))
+            );
+        }
+
+        $select->order(array('data.website_id', 'data.customer_group_id', 'data.product_id', 'data.sort_order'));
 
         $data = $this->_getReadAdapter()->fetchAll($select);
         $productData = array();
@@ -68,4 +95,4 @@
 
         return $this->_getReadAdapter()->fetchOne($select);
     }
-}
\ No newline at end of file
+}
Index: app/code/core/Mage/Weee/Model/Observer.php
===================================================================
--- app/code/core/Mage/Weee/Model/Observer.php	(revision 44593)
+++ app/code/core/Mage/Weee/Model/Observer.php	(working copy)
@@ -195,7 +195,13 @@
 
     public function updateDiscountPercents(Varien_Event_Observer $observer)
     {
-        Mage::getModel('weee/tax')->updateDiscountPercents();
+    	if ( $observer->getEvent()->getProductCondition() ) {
+        	Mage::getModel('weee/tax')->updateDiscountPercentsByPCondition(
+        	   $observer->getEvent()->getProductCondition()
+        	);
+    	} else {
+    		Mage::getModel('weee/tax')->updateDiscountPercents();
+    	}
         return $this;
     }
 
@@ -252,4 +258,4 @@
 
         return $this;
     }
-}
\ No newline at end of file
+}
Index: app/code/core/Mage/Weee/Model/Tax.php
===================================================================
--- app/code/core/Mage/Weee/Model/Tax.php	(revision 44593)
+++ app/code/core/Mage/Weee/Model/Tax.php	(working copy)
@@ -152,6 +152,12 @@
         }
     }
 
+    public function updateDiscountPercentsByPCondition($productCondition)
+    {
+    	$this->getResource()->updateDiscountPercentsByPCondition($productCondition);
+    	return $this;
+    }
+
     public function updateDiscountPercents()
     {
         $this->getResource()->updateDiscountPercents();
Index: app/code/core/Mage/Weee/sql/weee_setup/mysql4-upgrade-0.13-0.14.php
===================================================================
--- app/code/core/Mage/Weee/sql/weee_setup/mysql4-upgrade-0.13-0.14.php	(revision 0)
+++ app/code/core/Mage/Weee/sql/weee_setup/mysql4-upgrade-0.13-0.14.php	(revision 0)
@@ -0,0 +1,31 @@
+<?php +/** + * Magento + * + * NOTICE OF LICENSE + * + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to [email protected] so we can send you a copy immediately. + * + * DISCLAIMER + * + * Do not edit or add to this file if you wish to upgrade Magento to newer + * versions in the future. If you wish to customize Magento for your + * needs please refer to http://www.magentocommerce.com for more information. + * + * @category   Mage + * @package    Mage_Weee + * @copyright  Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com) + * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0) + */ + +$installer = $this; +/* @var $installer Mage_Weee_Model_Mysql4_Setup */ + +$installer->getConnection()->modifyColumn($installer->getTable('weee/discount'), 'customer_group_id', 'SMALLINT(5) UNSIGNED DEFAULT NULL');
+$installer->getConnection()->modifyColumn($installer->getTable('weee/discount'), 'website_id', 'SMALLINT(5) UNSIGNED DEFAULT NULL');



2°) Loggez vous  sur le système en SSH

3°) Backupez votre fichiers
app/code/core/Mage/Weee/etc/config.xml
app/code/core/Mage/Weee/Model/Mysql4/Tax.php
app/code/core/Mage/Weee/Model/Observer.php
app/code/core/Mage/Weee/Model/Tax.php
app/code/core/Mage/Weee/sql/weee_setup/mysql4-upgrade-0.13-0.14.php

4°) Lancez la commande « patch p-0 < weee_discount_optimize_sm70_121.patch« 
5°) Priez
6°) Testez

if (patch == « good ») {Send(flower->Wikigento)} else {Send(insults->Varien)} endif

écrit par Philippe Humeau \\ tags: , , ,

juil 22

1000000-dl

Quand fêter l’anniversaire d’un logiciel ?

Au démarrage du projet ? Après sa version 1.0 ? Au nombre de downloads ?

Moi je prends la dernière option, le succès significatif se mesure en fonction du nombre de téléchargements ! La barre du million de téléchargement vient d’être franchie et c’est très encourageant.

Evidemment, la méthode de compte reste un sujet de fond. Un développeur qui a utilisé une version 0.9.6 ou même précédente aura très probablement téléchargé 5 ou 6 versions ultérieures. Les early adopters ont donc déjà probablement 10 ou 20 téléchargement chacun. Ensuite, il y a les downloaders automatisés par les hébergements massivement mutualisés. Ces « hits » sont difficile à compter mais Varien nous assure d’une manière générale que la méthode est « very conservative ».

Mais quand bien même… 1 million de téléchargements… C’est énorme, tout bonnement énorme. Même si certain n’en ont rien fait, même si d’autres l’ont téléchargé 100 fois, même si il ne fallait prendre en compte qu’un 50° des téléchagement en compte, on parle au minimum de 20 000 sites en 16 mois…

Bon, pour fêter ca, on va faire raler Roy, voici le :  « Burn Roy’s Blackberry Contest ». (BRBC)

Tout le monde lui envoie (roy [at] varien.com) un petit message  sympa avec un « Happy One million from Wikigento » en sujet ;-)
Si on arrive à faire fondre son blackberry, j’offre l’apéro à l’auteur du dernier mail qu’il aura reçu !

Je vous tiens au courant dès qu’il m’insute et demande de retirer ce post (signe avant coureur de la victoire !)

Quelque soit le détail du compte, ce framework a un indéniable succès alors let’s be positive :

Happy 1 Million Varien !

écrit par Philippe Humeau \\ tags: , ,

juil 17

La deuxième réunion du Community Advisory Board de Magento a eu lieu hier et de grands mouvements se préparent chez Varien.

Time to go public : ouverture des portes !

Première nouvelle, et de taille : Varien ouvre la roadmap de Magento !

Oui, vous avez bien lu et entendu, les suggestions, idées et volontés vont être collectées et la roadmap de la version CE, c’est la notre. Varien va bien évidemment contribuer à la suite de la roadmap mais c’est à nous de l’enrichir.

Les membres Français du CAB (community Advisory Board) sont là pour vous aider à collecter les idées, les formaliser et les acheminer à Varien, entre les sages mains de Yoav Kutner, le directeur technique. Gabriel Bouhatous, François Ziserman et moi même Philippe Humeau allons donc mettre en place le nécessaire pour aider à diffuser vos idées et vos envies au sein de la roadmap.

Votre participation

Une branche du source tree va être ouvert aux contributions et au « foreign code ». Comprenez par là que vous tous, développeurs talentueux et  contributeurs à la mentalité Opensource allez pouvoir ajouter votre nom au  livre d’or des développeurs de Magento.  Sur le CV, ca va  avoir de l’allure :)

Bon moi je suis une truffe en développement (et ce n’est pas prêt de changer vu mon investissement temps /homme dans le domaine) mais… je suis tout à fais dans la mentalité opensource et j’aime l’idée d’aider la communauté, alors coté roadmap et fonctionnel, je serai ravi de vous aider, coté développement je ne saurais trop vous conseiller d’en parler principalement avec Gabriel.

Des alphas et des betas publiques (?)

Vous aviez trouvé auparavant des betas versions publiques sur le CVS de Varien mais là, il semblerait (si j’ai bien compris, j’étais un peu distrait à ce moment là), il semblerait donc que les alphas et betas deviennent accessibles afin que les aficionados puissent voir en avant première les nouveautés des releases à venir.

Des outils pour supporter tout cela

Varien étudie plusieurs outils pour aider au suivi des évolutions et de la roadmap, du code, des release et des bugs. Beaucoup d’outils existent mais les « out of the box » du marché sont aussi très bien. Par exemple les outils d’Atlassian. D’ailleurs si vous avez des retours sur ces outils, Varien sera preneur !

En tout cas le but, c’est de fournir à la communauté un moyen de publier et de suivre des modifications de code ainsi que de mettre en place  un wiki très souple.

Une volonté de fond

Comme prévu, les mauvaises langues se trompaient, Varien à non seulement l’intention claire et publique d’ouvrir la roadmap et le code mais toujours d’entretenir et d’amplifier la version CE ! Cette version était la notre, elle devient un point commun de contribution, ouverte et souple, c’est une promesse tenue cette version CE restera le centre nerveux de Magento et la version EE sera développée dans un source tree indépendant mais reposant sur la CE.

Plus de CE, plus de EE et c’est tout l’inverse, la CE s’ouvre et cela lui garantie une looooongue vie !

écrit par Philippe Humeau \\ tags: ,

juil 09

Bonjour à tous & à toutes,

Ce petit billet pour signaler un bel effort de la part de Xi Ingénierie pour aider les E-commerçants et chefs de projets à se décider. En effet Florian et ses collègues se sont attelé à la rédaction d’un guide sur les fonctionnalités de Magento que vous pourrez trouver ici.

Le support survol de très nombreux points liés à Magento ce qui permet de prendre très rapidement connaissance des points forts de cette plateforme. Il a également le mérite d’être en Français ce qui ne gache rien, si vous hésitez entre plusieurs solutions de E-commerce ou tout simplement si vous souhaitez effectuer une revue assez précise de la solution, cette lecture est conseillée !

Merci Xi :)

écrit par Philippe Humeau \\ tags: ,

juil 01

Bonjour à toutes et à tous,

Ce coup-ci l’article sera en anglais car c’est une publication d’un white paper rédigé à l’origine par NBS System sur les performances de Magento quand on y couple Zend server. Les tests & benchmarks sont fait entre les versions 1.2, 1.3 et 1.3 avec le flat catalog d’activé puis avec Zend Server et enfin avec Zend server incluant le page cache (version payante).

Ce white paper est en licence Creative commons paternity no commercial use, vous pouvez donc le télécharger, le modifier, le diffuser à votre convenance, sauf pour usage commercial. Celui-ci est uniquement autorisé aux sociétés NBS System, Zend et Varien. (NBS System peut autoriser explicitement l’usage commercial de ce contenu sur demande)

Vous pouvez le télécharger dans sa version PDF intégrale ici.

cc-logo

Magento & Zend Benchmarks

Version 1.2, 1.3 (with & without Flat Catalogs)

1. Foreword

Magento is a PHP/Zend application which intensively uses the CPU. Since version 1.1.6, each new version includes some mechanisms aimed to improve the performances. The goal is to use fewer resources for a given e-shop, which mainly means less CPU, in order to host more users with the same hardware.

One key to achieve better performances is how to optimize PHP pages generation and service. « LAMP » servers are well known and usually run Apache server with mod-php, eventually in fast_cgi mod.

Zend, the PHP Company, made a specific server (Zend Server), which includes a web application stack that (among other things) improves application performances through page caching and opcode reorganization & acceleration.

Apache and Zend Server is an alternative to the usual Apache and mod-php to run Magento, the goal of theses studies & tests is to qualify and estimate the performances added by the use of this software.

Many thanks to Yoav Kutner (Varien’s CTO) for providing us with prefilled catalogs for 1.2 and 1.3 version of Magento. Thanks goes as well to Zend labs for providing help in configuration and tweaking of the Zend Server as well as explaining the in depth mechanism of the solution.

Lire la suite »

écrit par Philippe Humeau \\ tags: , , , , ,