Un petit test :
Code PHP :
<?php
require_once 'Benchmark/Timer.php';
$benchmark = new Benchmark_Timer();
$benchmark->start();
// Hello World procédural
$benchmark->setMarker('Entrée procédural');
function bonjour($utilisateur)
{
return 'Bonjour, ' . $utilisateur['nom'];
}
$benchmark->setMarker('Exécution procédural');
for ($n=0; $n<10; $n++) {
$utilisateur = array('nom' => 'Bob');
for ($i=0; $i<10000; $i++) {
bonjour($utilisateur);
}
$benchmark->setMarker('Appel x10 000 procédural');
}
// Hello World objet
$benchmark->setMarker('Entrée objet');
class Utilisateur
{
private $nom;
function __construct($nom)
{
$this->nom = $nom;
}
function bonjour()
{
return 'Bonjour, ' . $this->nom;
}
}
$benchmark->setMarker('Exécution objet');
for ($n=0; $n<10; $n++) {
$utilisateur = new Utilisateur('Bob');
for ($i=0; $i<10000; $i++) {
$utilisateur->bonjour();
}
$benchmark->setMarker('Appel x10 000 objet');
}
$benchmark->stop();
$benchmark->display();
Code :
-----------------------------------------------------------------------------
marker time index ex time perct
-----------------------------------------------------------------------------
Start 1194359076.87903100 - 0.00%
-----------------------------------------------------------------------------
Entrée procédural 1194359076.87912500 9.4175338745117E-5 0.02%
-----------------------------------------------------------------------------
Exécution procédural 1194359076.87914700 2.1934509277344E-5 0.01%
-----------------------------------------------------------------------------
Appel x10 000 procédural 1194359077.09060000 0.21145296096802 49.87%
-----------------------------------------------------------------------------
Entrée objet 1194359077.09062000 2.0027160644531E-5 0.00%
-----------------------------------------------------------------------------
Exécution objet 1194359077.09063800 1.7881393432617E-5 0.00%
-----------------------------------------------------------------------------
Appel x10 000 objet 1194359077.30300800 0.21237015724182 50.09%
-----------------------------------------------------------------------------
Stop 1194359077.30302900 2.0980834960938E-5 0.00%
-----------------------------------------------------------------------------
total - 0.4239981174469 100.00%
-----------------------------------------------------------------------------
Après ça peut-on encore décemment considérer la POO comme automatiquement moins performante que le procédural ?
La seule différence c'est qu'avec la POO on a plus vite tendance à séparer les couches, mais utiliser un modèle bien séparé en procédural sera tout aussi coûteux : un appel de méthode ne coûte pas plus cher qu'un appel de fonction, donc à partir de là on ne peut pas considérer le choix de l'objet comme étant un frein aux perfs.