Voici le test effectué, il donne le temps nécessaire et la mémoire utilisée pour réaliser la conversion de date en utilisant Zend_Date, DateTime un objet natif fourni par PHP et les fonctions natives de PHP strftime et strtotime
$d = '2011-03-28 07:28:12';
$loop=1000;
$i=0;
$start = microtime(true);
$memory_start = memory_get_usage();
while ($i++ < $loop) {
$date = new Zend_Date($d, 'MM.dd.yyyy hh:mi:ss');
}
$memory_end = memory_get_usage();
$end = microtime(true);
echo 'Zend_Date - Time : ', $end - $start,
' / Memory : ', $memory_end - $memory_start, "\n";
unset ($date);
$i=0;
$start = microtime(true);
$memory_start = memory_get_usage();
while ($i++ < $loop) {
$date = new DateTime($d);
$date = $date->format('j M Y H:i:s');
}
$memory_end = memory_get_usage();
$end = microtime(true);
echo 'Native PHP Object - Time : ', $end - $start,
' / Memory : ', $memory_end - $memory_start, "\n";
unset ($date);
$i=0;
$start = microtime(true);
$memory_start = memory_get_usage();
while ($i++ < $loop) {
$date = strftime('%d %b %Y %H:%M:%S', strtotime($d));
}
$memory_end = memory_get_usage();
$end = microtime(true);
echo 'Native PHP - Time : ', $end - $start,
' / Memory : ', $memory_end - $memory_start, "\n";
Et voici le résultat,
Zend_Date - Time : 6.49872088432 / Memory : 5401472 Native PHP Object - Time : 0.00977492332458 / Memory : 400 Native PHP - Time : 0.00840377807617 / Memory : 176
Sans surprises l’utilisation des fonctions natives est beaucoup moins gourmande en ressources. Attention je ne fait aucun reproche à Zend_Date, cet objet à été designé pour remplir des tâches autrement plus compliquées que la simple conversion de format. Le problème c’est l’utilisation que certains développeurs font des outils à leur disposition, à grand principe de “qui peut le plus, peut le moins” ils vont avoir tendance à sortir un objet implémentant un algorithme complexe développer pour détecter des mots clés dans un texte pour... afficher un “Hello word!”.
Quelque soit le langage, les objets disponibles sont conçus dans un but bien défini, vérifiez toujours que l’objet que vous voulez utiliser est fait pour ce que vous voulez en faire, et si possible, utilisez les fonctions natives du langage.
En même temps, Zend_Date est... comment dire ... overengineered, pas forcément le plus pertinent à comparer :)
RépondreSupprimer