-
Notifications
You must be signed in to change notification settings - Fork 5
Etat des lieux
Bonne nouvelle les enfants,
La version 6.0.0 de FMUP voit le jour et celle-ci ne rigole pas. Elle apporte une grosse augmentation de performance sur les traitements des résultats des bases de données ainsi que sur la qualité du code. Pour permettre ceci, elle casse beaucoup du code existant afin d’apporter de la flexibilité et une meilleur responsabilité de chaque composant (principe SOLID).
La performance sur les traitements des résultats de bases de données est basé sur les principes d’intégrateurs imbriqués. Ces composants sont normalement retro compatible et activés par défaut (dans Model::objectsFromMatrix). Néanmoins, il faut utiliser les méthodes FMUP\Db->getIterator()
à la place de FMUP\Db->fetchAll()
afin de réellement profiter de la puissance du composant.
Un petit exemple de performance sur une base de donnée de 44554 utilisateurs :
<?php
$start = microtime(true);
$count = 0;
foreach (Beneficiaire::findAll() as $user) {
$count++;
}
$end = microtime(true) - $start;
var_dump('Time (sec): ' . $end);
var_dump('Nb Elements : ' . $count);
var_dump('RAM Usage (Mo): ' . memory_get_usage(true) / 1024 / 1024);
//process killed by system
Le processus ne parvient pas à traiter les données et est directement killé par le système parce qu’il consomme trop de rame et/ou s’exécute en beaucoup trop de temps. Un autre essai avec une limite aux 20000 premiers utilisateurs :
<?php
$start = microtime(true);
$count = 0;
foreach (Beneficiaire::findAll(array(), array('top' => 20000)) as $user) {
$count++;
}
$end = microtime(true) - $start;
var_dump('Time (sec): ' . $end); // string(26) "Time (sec): 49.57592010498"
var_dump('Nb Elements : ' . $count); // string(19) "Nb Elements : 20000"
var_dump('RAM Usage (Mo): ' . memory_get_usage(true) / 1024 / 1024); // string(21) "RAM Usage (Mo): 108.5"
Mon script consomme 108,5 Mo de RAM et met presque 50 secondes à s’exécuter
<?php
$start = microtime(true);
$count = 0;
foreach (Beneficiaire::findAll() as $user) {
$count++;
}
$end = microtime(true) - $start;
var_dump('Time (sec): ' . $end); // string(27) "Time (sec): 5.4314088821411"
var_dump('Nb Elements : ' . $count); // string(19) "Nb Elements : 44554"
var_dump('RAM Usage (Mo): ' . memory_get_usage(true) / 1024 / 1024); // string(19) "RAM Usage (Mo): 4.5"
Mon script s’exécute en presque 6 secondes, traite tous les éléments et consomme 4.5 Mo de RAM.
Coté qualité, ci-joint le rapport de Jenkins sur les dernières versions mineurs de FMUP (les derniers Z de chaque Y sur les versions au format X.Y.Z)
Les version inferieurs à la 3.0.0 ne parviennent pas à générer de rapport.
Lexique :
- 3.0.0
- 3.1.2
- 3.2.0 (fail)
- 3.3.3
- 4.0.6
- 4.2.0 (oui je me suis planté lors de la génération et j’ai inversé avec la #7)
- 4.1.0
- 4.3.1
- 5.0.2
- 5.1.1
- 6.0.0 (#20)
Code Coverage 0.1% (15/10229 elements) Methods 0.4% Statements 0.1%
Code Coverage - 2.8% (304/10832 elements) Methods 6.8% Statements 2.3%
Code Coverage - 5.5% (304/5486 elements) Methods 9.7% Statements 4.8%
Le framework est devenu opensource et est suivi par scrutinizer pour la CI. les informations sont donc librement accessibles via Scrutinizer