Test de performances sur les boucles
-
Boucle foreach ou programmation fonctionnelle ?
<?php for ($i = 0; $i < 1000000; $i++) { $histories[] = ['identifier' => $i, 'old_value' => 'anomaly']; } $time = microtime(true); $identifiers = []; array_walk($histories, function($history) use (&$identifiers) { if (!isset($identifiers[$history['identifier']])) { $identifiers[$history['identifier']] = $history['old_value']; } }); echo 'func = ' . (microtime(true) - $time) . "\n"; $time = microtime(true); $identifiers = []; foreach ($histories as $history) { if (!isset($identifiers[$history['identifier']])) { $identifiers[$history['identifier']] = $history['old_value']; } } echo 'proc = ' . (microtime(true) - $time) . "\n";
Les résultats obtenus sont édifiants (php 7.1) :
func 1,02040 1,04031 1,02185 1,04989 1,02997 proc 0,22925 0,23119 0,23497 0,23554 0,23292 ratio 4,45 4,50 4,35 4,46 4,42 Ma conclusion : si l’écriture fonctionnelle pour une boucle n’apporte rien de vraiment bénéfique à votre programme, préférez l’écriture procédurale, vous multiplierez les performances de votre boucle par 4,4 au moins !
Voir aussi :