24
2010
Optimiser Zend Partie 2 : mémoire
Aujourd’hui nous allons voir la suite de l’optimisation Zend. Je sais, ça fait un moment que je devais le faire mais là j’ai le temps.
Pour ce tutoriel je suis sur un unbuntu 10.04 LTS avec PHP5.3.2 et avec le cache APC activé. Les résultats que vous verrez povienne de tests sur mon site perso en temps réel en local afin que vous vous fassiez une idée sur la consommation d’un site vers la fin de son développement de la taille du mien.
Nous allons donc voir aujourd’hui la consommation mémoire de chacune de vos pages ou plutôt de vos actions, via un fichier de log généré par Zend. Ce log est généré par une fonction intégrée au bootstrap de votre projet. Je vais vous enseigner comment le mettre en place.
Nous verrons à la fin la charge mémoire du site avec les require_once laissés dans la library Zend (voir poste précédant) puis en les enlevant pour voir s’il y a une réelle différence.
Pour commencer, nous avons besoin du plugin Zend effectuant toute la partie traitement :
| PHP | | copy code | | ? |
| 01 | class App_Controller_Plugin_MemoryPeakUsageLog extends Zend_Controller_Plugin_Abstract |
| 02 | { |
| 03 | protected $_log = null; |
| 04 | |
| 05 | public function __construct(Zend_Log $log) |
| 06 | { |
| 07 | $this->_log = $log; |
| 08 | } |
| 09 | |
| 10 | public function dispatchLoopShutdown() |
| 11 | { |
| 12 | //récupère l'usage de mémoire utilisé réellement par PHP |
| 13 | $peakUsage = memory_get_peak_usage(true); |
| 14 | //on récupère l'url de la page en cours |
| 15 | $url = $this->getRequest()->getRequestUri(); |
| 16 | //on stoque tout sa dans notre fichier de log avec le statut info |
| 17 | $this->_log->info($peakUsage . ' bytes ' . $url); |
| 18 | } |
| 19 | } |
Et pour finir voici la fonction à ajouter dans notre bootstrap afin d’exécuter ce plugin automatiquement pour chaque page:
| PHP | | copy code | | ? |
| 01 | protected function _initEnableMemoryUsageLogging() |
| 02 | { |
| 03 | //initialisation d'un fichier de log |
| 04 | //il doit exister pour être utilisé. |
| 05 | $writer = new Zend_Log_Writer_Stream( |
| 06 | APPLICATION_PATH . '/logs/memory_usage'); |
| 07 | //création d'un log rattaché à notre fichier précédemment iinitialisé |
| 08 | $log = new Zend_Log($writer); |
| 09 | //on appelle un plugin s'occupant de tout ce traitement |
| 10 | $plugin = new App_Controller_Plugin_MemoryPeakUsageLog($log); |
| 11 | |
| 12 | /** |
| 13 | * Si vous mettez votre plugins avant tous les autres, ils seront |
| 14 | * pris en compte dans le calcul de mémoire. |
| 15 | */ |
| 16 | $frontController = $this->getResource('frontController'); |
| 17 | //on enregistre le plugin |
| 18 | $frontController->registerPlugin($plugin); |
| 19 | } |
Normalement, en allant sur la page d’index de votre page, le fichier memory_usage devrait avoir la ligne suivante :
| Text | | copy code | | ? |
| 1 | 2010-05-24T16:07:23+02:00 INFO (6): 20971520 bytes /throrinstudio/ |
La valeur affichée en bytes équivaut à 20 Mo environ. Si vous refaites un chargement de cette page, la mémoire a diminuée, ceci grâce au cache APC de PHP :
| Text | | copy code | | ? |
| 1 | 2010-05-24T16:08:33+02:00 INFO (6): 6291456 bytes /throrinstudio/ |
La valeur ici équivaut à 6,2 Mo environ. Maintenant nous enlevons les require_once de la library Zend et nous effectuons un autre test (il y a encore le cache APC) :
| Text | | copy code | | ? |
| 1 | 2010-05-24T17:09:27+02:00 INFO (6): 6029312 bytes /throrinstudio/ |
Ceci équivaut à 6 Mo. La différence n’est pas énorme mais mon site utilise peu de classes Zend. Si vous prenez un gros site intégrant Zend_AMF, Zend_DB et d’autres aussi gourmands, vous aurez une plus grande différence qu’ici. Idem si vous n’utilisez pas le cache APC. En purgeant le cache, j’arrive à la valeur suivante lors du premier chargement :
| Text | | copy code | | ? |
| 1 | 2010-05-24T17:09:16+02:00 INFO (6): 19922944 bytes /throrinstudio/ |
Ici, ça nous fait 19 Mo. Si nous regardons ce résultat par rapport au premier, nous arrivons à une différence de 1 Mo d’utilisation mémoire.
En conclusion, cette partie n’est pas vraiment une optimisation. Elle sert surtout à voir l’utilisation mémoire de votre site. Vous pouvez constater la différence d’utilisation mémoire avec et sans le cache APC. Cette différence est tout de même énorme (14 Mo dans l’exemple).
Articles Connexes
Laisser un commentaire
Catégories
- Actualités (11)
- Android (5)
- Bases de Données (4)
- Développement (1)
- PasteQR (2)
- PHP (8)
- Systèmes et Réseau (5)
- Technologies Web (5)
- Tests (2)
- Zend Framework (30)
Commentaires récents
- (@Fritte7) (@Fritte7) dans PasteQR passe en 1.1.0
- roux dans ZendX Jquery Dialog
- Fritte7 dans Gérer des évènements dans une listview.
- Fierfeu dans Introduction à Zend Framework 2.0
- Christophe B. dans Gérer des évènements dans une listview.
Mots-Clefs
Active Directory AJAX Android Apache2 APC Bootstrap Chrome Configuration CSS Eclipse Firefox Google html HTTP Installation Internet Internet Exporer Java Javascript JQuery JQuery UI Linux Mémoire Mac MySQL Navigateur Opera PDO Pear Phing PHP Safari SGBD SMTP SQL Ubuntu View Helper Windows Server XML Zend Cache Zend DB Zend Form Zend Framework ZendX ZF 2.0
WP Cumulus Flash tag cloud by Roy Tanck requires Flash Player 9 or better.

Publié par Throrïn




