Performance de la 0.8 rc2 ?
Auteur Sujet

Post 
Salut,
je suis en train de tester la 0.8 rc2 avec un module entièrement réécrit pour elle perso en utilisant les méchanismes de cache et toutes les subtilités que j'ai pu trouver dans les modules officiels. Mon "ancien" site est en 0.7x et j'avais obtenu des temps de rendu acceptables du genre 0.1 ou 0.2 sec par page (c'est un exemple) et pour le même genre de page et toutes les options de cache possible (pnrender + xanthia), je n'obtiens, sur le même serveur, que péniblement 0.5 à 0.6 sec de temps de rendu (avec cache). Est-ce que d'autres personnes ont observé un problème de perf avec la 0.8 ?
Parce que cela m'ennuyait vraiment d'avoir passer trois mois à tout réécrire pour au final avoir un site plus lent qu'avant.

Y a t 'il des "tips" pour optimiser les temps ?

Merci

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
J'aurais une autre question dans le même genre, y a t'il vraiment une différence de perf entre php 5 et php 4 ? (mon serveur est actuellement en php 4 mais je peux le passer en 5)
Merci

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Hello,

Afin de tenter d'avantage de cibler le problème, y'a-t-il eu des modifications au niveau du serveur ? Quels sont les versions de php / mysql, serveur web ?

Le problème s'applique-t-il sur tout le site ou juste sur le module en question ?

Quelle est le système d'accès à la base de donnée (DBUtil, mysql "simple", autre) ? Quel est le type de base de donnée (mysql, pgsql, ...) ? Utilises-tu pnRender ?

Le cache ne fait pas tout sur un serveur web, une grande partie de la rapidité d'un site vient des requêtes, de la construction.

Concernant les performances de php, PostNuke 0.8 à été développé pour php 5 et, est donc optimisé pour : Il ne peut pas, normalement être installé sur un php < 5.1.2

++


Gilles  ><>°
Données personnelles Accueil

Post 
C'est dommage, mon serveur mutualisé me dit que je suis en php 4. Mais bon, ce n'est pas vraiment le problème pour l'instant, je pensais que mon site local n'était pas représentatif et j'ai donc envoyé mon site sur le serveur final pour voir mais j'ai le même genre de problème qu'en local.
En local , je suis avec easyphp 2.0 donc en :
MySQL client version: 5.0.22
PHP Version 5.2.0
Comme j'ai redeveloppé complètement mon module, je me suis basé sur pnrender + xanthia + DBUtils. j'ai mis en place les astuces de cache décrits sur le forum pour pnforum. je n'utilise (pour l'instant) pas d'autre module que le mien, donc c'est bien ma façon de faire qui pose problème. J'ai essayé d'utiliser toutes les astuces que j'ai pu trouver dans les modules pour me faciliter la tâche de programmation mais j'ai l'impression que j'ai perdu en réactivité, on programme vite mais pour un résultat décevant en terme de perf. Je me trompe peut être (j'espère) mais est-ce que quelqu'un a déjà fait des comparaisons entre la version 0.7 et 0.8 ?

Merci

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Pour ton serveur mutualisé, tu peux peu être basculer la version de ton php via le htaccess, chez ovh par exemple c'est la commande

  1. SetEnv PHP_VER 5 


Sinon dans les options du xanthia et pnrender, tu as décoché les options "Vérification de la compilation", "Forcer la compilation", "Forcer la recompilation des modèles" et "Vérifier si une version mise à jour des modèles existe".

Pour ma part, je n'ai pas noté de baisse de performance, mais comme tu le soulignes la tâche de programmation est simplifée et complète !

J'utilise pas mal l'ajax pour faire de la pagination par exemple... cela accélère l'affichage car tu recharges qu'une partie de ta page, penses à utiliser l'ajax car c'est aussi l'une des grandes forces de cette 0.8 !
Données personnelles Accueil

Post 
rapport à çà

est ce que pnTemp/Xanthia_Config/ contient des fichiers ? si non c'est que ton template n'est pas en cache

est ce que tu as été voir dans le fichier config.php, il y plusieurs possibilités de configurations liés au systéme de log.

en gros, le cms te propose de configurer ton systéme en mode "prod" ou "dev"

  1. $PNConfig['Debug']['debug_key']                   = ($PNConfig['System']['development'] ? 'error_reporting_development' : 'error_reporting_production'); 



si tu veux faire le bourrin doit y avoir moyen de mettre

  1. $PNConfig['Debug']['debug_key']      = ~E_ALL 


si tu veux etre plus propre (plus haut dans le fichier)


  1. $PNConfig['System']['development'] = 0;        


modifié par : mumuri, 02 Jan 2008 - 13:28
Données personnelles Accueil

Post 
Merci pour les conseils. J'avais trouvé plus ou moins tous les paramètres d'optimisation mais je suis encore moyennement satisfait par les résultats. Je vais essayer de faire du profiling avex xdebug pour voir ...
Merci

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
ok si tu as des pistes je suis preneur
Données personnelles Accueil

Post 
bon a priori j'ai les même problème de performance

- remarque :
que l'on soit en mode développement ou production, on a des entrées de log pour tous les "anciens" modules qui utilisent les anciennes fonctions

une entrée par appel
Citation :
Function pnVarPrepForDisplay() is deprecated. Please use DataUtil::formatForDisplay() instead.


je regarde plus en profondeur, il doit y avoir autre chose

modifié par : mumuri, 03 Fév 2008 - 20:55
Données personnelles Accueil

Post 
Il faut virer les logs... c'est la seule solution dans ce cas... aller voir dans settings-> journaux ou logs... et tu peux les désactiver !

++


Gilles  ><>°
Données personnelles Accueil

Post 
ok merci

apparemment y'a toujours l'option qui permet de générer une version "en cache" de son thème dans pnTemp/Xanthia_Config,
par contre j'ai pas trouvé ou elle était

modifié par : mumuri, 04 Fév 2008 - 00:07
Données personnelles Accueil

Post 
par ailleur quelle sont les différences majeures entre la RC1 et 2 (car il me semble que les ralentissements étaient moin flagrant)
Données personnelles Accueil

Post 
Exactement, je ne sais pas, cela doit toucher 3 tonnes de fichiers mais lesquels "pèsent" plus lourd ??
Sinon, pour l'optimisation des blocs, il y a des champs dans la définition d'un bloc que j'ai cherché dans tous les .php mais je n'ai trouvé aucune utilisation dans aucun .php (.8), ce sont les champs form_content et form_refresh. Je pense que cela serait pas mal d'avoir une gestion fine du temps de mise en cache bloc par bloc plutôt que globale au site.

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
a la limite avec windiff c'est jouable (winmerge pour ceux qui connaissent pas sous windows)

a premiére vue .. en vrac , sur une comparaison de la RC1 et 2


à chaque chargement de page dans pnInit ... purge des logs
LogUtil::_cleanLogFiles();

  1.   function _cleanLogFiles() 
  2.     { 
  3.         if (defined('_PNINSTALLVER')) { 
  4.             return; 
  5.         } 
  6.  
  7.         global $PNConfig; 
  8.        .... 
  9.       


cette méthode ne vérifie pas que si les logs sont activés dans le fichier de config général

il faudrait peut être mettre un
  1.    $logEnabled = $PNConfig['Log']['log_enabled']; 
  2.         if (!$logEnabled) { 
  3.             return; 
  4.         }[ 


dans la méthode (aprés $PNConfig)

Pour le reste mise à part la mise en place des logs, je ne vois pas grand chose

Données personnelles Accueil

Post 
Cela n'a pas non plus d'être un gouffre cette fonction, une boucle pour tester la date de fichiers ?!?

Pour les diffs, je suis habitué à kdiff3 même sous xp.

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
une boucle qui purge/efface plusieurs méga de logs (si il y en a )

disons que plus généralement, je connais log4j (l'équivalent de logutils pour java), et ils se trouvent qu'il y a des choses comme çà qui traine

Citation :
Il est possible que l'utilisation de log4j influe sur les performances de votre application, même lorsque la journalisation est entièrement désactivée. Un message debug() ne sera évidemment pas exécuté si le logger possède une priorité supérieure. Néanmoins, le calcul des paramètres fournis à la méthode pourront eux entraîner une chute de performances. La documentation officielle de l'API conseille de vérifier l'état de la journalisation avant toute activité :


if (logger.isDebugEnabled())
logger.debug(Math.PI * Math.PI);

http://gfx.developpez.com/tutoriel/java/log4j/

ce qui fait que je me demande si même si ces traitements ne sont pas trop lourd, comme ils sont réalisé un grand nombre de fois, il vaut peut être mieux les éviter au maximum

modifié par : mumuri, 04 Fév 2008 - 23:24
Données personnelles Accueil

Post 
Hmm, java et performance ... :) Mais bon, ce sont les petits ruisseaux qui font les grandes rivières ...

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Tiens , je viens de trouver comment modifier le temps de mise en cache bloc par bloc (en tout cas pour les bloc "persos"). Dans mon, j'ai des blocs qui peuvent prendre pas mal de temps et le temps de mise en cache global, je ne trouvais cela pas terrible. En fait, on peut récupérer le paramètre "refresh" du bloc et le "coller" dans le pnrender. Dans mes "blocs" cela ressemble à cela ...

  1. // Create output object 
  2. $pnRender = pnRender::getInstance('xbee',true); 
  3.      
  4. // Le block est en cache ? 
  5. $pnRender->cache_id = 0; // on force le même cache pour tout le monde 
  6. $pnRender->cache_lifetime = $blockinfo['refresh']; // on recupère le paramètre refresh du bloc 
  7. if ($pnRender->is_cached('xbee_block_memories.htm'))  
  8.     //echo "CACHE !! <br>"; 
  9.     $blockinfo['content'] = $pnRender->fetch('xbee_block_memories.htm'); 
  10.     return pnBlockThemeBlock($blockinfo); 
  11. //echo "NOCACHE !! <br>"; 




"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Des nouvelles du front ... (le mien car je transpire à force de chercher ce qui rame chez moi)

Après un réessai de xdebug (parce que vraiment cela rame trop), j'ai quand même trouvé des choses intéressantes, je ne sais pas encore quoi en faire mais il y a un certain nombre de fonctions qui sont appellées un très grand nombre de fois et que je m'empresserai de modifier si j'étais en C ou en C++. Par exemple, j'ai la fonction pnModUrl qui est appelée 930 fois sur ma page (en fait, je viens de m'apercevoir que c'est le "pager" de pnRender qui produit la plupart de ces appels), les fonctions pnModGetInfo et pnModGetIDFromName 1340 fois et la gagnante est pnErrorHandler avec 6287 appels. Il y a certainement des erreurs dans mon code mais quand je regarde des fonctions de base comme pnModGetIDFromName, je vois qu' il n'y a aucun traitement particulier pour prendre en compte le caractère très répétitif de cette fonction (exemple, un bon gros tableau associatif). Par contre, je ne sais pas si c'est possibe pour des problèmes de sécurité ou de mise en cache ou autres ...

modifié par : xbee, 08 Fév 2008 - 21:03

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil

Post 
Tu veux dire qu'en ouvrant 1 page, on a plus de 8500 fonctions appelées ? Ou c'est après une période d'utilisation "t" avec "y" utilisateurs ?


Gilles  ><>°
Données personnelles Accueil

Post 
Oui, sur une seule page. Bon, il peut y avoir des bugs dans mon code, j'en ai trouvé pas mal en regardant les logs d'erreur mais cela ne m'etonne pas trop, il n'y pratiquement pas de méthode de "cache" dans les fonctions de base, c'est-à-dire que tu poses 100 fois la même question à une fonction, tu auras 100 fois le déroulement complet de celle-ci qui peut etre court ... ou pas.
Bon, le but de la 0.8 n'est pas l'optimisation mais la fourniture d'une nouvelle API sécurisée mais je pense qu'il y a une réserve de perf en perspective ...

"Power corrupts. PowerPoint corrupts absolutely."
My personnal (french) Websites: http://www.xbee.net (0.8)
and http://fczone.xbee.net (0.764)
Données personnelles Accueil
Post 
Si tu trouves des problèmes de ce genre, n'hésite pas à les faire remonter à l'équipe de dev (par le noc) et même mieux, si tu trouves des façons de faire pour optimiser la chose et passer de 6287 à 1000 ou même moins gagnant pleins de temps, tes contributions seront les bienvenues !

++


Gilles  ><>°
Données personnelles Accueil