Skip to content

Etat des lieux

Jay MOULIN edited this page May 24, 2017 · 4 revisions

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 :

Avec FMUP 5.1.1

<?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

Avec FMUP 6.0.0

<?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.

Qualité de code

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.

Checkstyle

Checkstyle

PMD

PMD

Duplicate Code

Duplicate Code

Code Coverage

Code Coverage

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)

Sur la 3.0.0 :

Code Coverage ­ 0.1% (15/10229 elements) Methods 0.4% Statements 0.1%

Sur la 5.1.1

Code Coverage - 2.8% (304/10832 elements) Methods 6.8% Statements 2.3%

Sur la 6.0.0

Code Coverage - 5.5% (304/5486 elements) Methods 9.7% Statements 4.8%

A partir de la 7.0.0

Le framework est devenu opensource et est suivi par scrutinizer pour la CI. les informations sont donc librement accessibles via Scrutinizer

Clone this wiki locally