IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Performance] Codage des classes


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Coordinateur développement web
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 412
    Points
    412
    Par défaut [Performance] Codage des classes
    Bonjour,

    Que pensez vous de ce style de codage de classe métier ? au niveau performance cette methode est elle bonne ? Je suis ouvert a toute vos remarques concernant ce codage.

    Pourquoi ces questions ? je me retrouve depuis quelques temps avec des problème de lenteur au niveau de mes applications des qu'il y a une montée en charge des données dans la BDD.

    Merci de vos retour

    Mic

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
     
    <?php
    /// Retourne un tableau de icones
    function get_icones()
    {
     $bdd = new connectPDO();
     
     $req = "SELECT icones.ico_id FROM icones ";
     $sql = $bdd->connexion->prepare($req);
     $sql->execute();
     $t_object = array();
     while ($res = $sql->fetch(PDO::FETCH_OBJ))
     {
      $t_object[] = new icones($res->ico_id);
     }
     return $t_object;
    }
     
    /// Gestion des icones
    class icones extends connectPDO
    {
     protected $id;
     protected $nom;
     protected $image;
     protected $defaut;
     
     ///constructeur
     public function __construct($id=NULL){
      $this->id = $id;
      $this->__load();
     }
     
     /// Charge les élèments en mémoire
     private function __load(){
      if($this->id)
      {
       $this->__connect();
       $req = $this->connexion->prepare("SELECT 
              ico_nom,
              ico_image,
              ico_defaut 
            FROM icones 
            WHERE ico_id=:ico_id
           ");
       $req->bindParam(':ico_id', $this->id);
       $req->execute();
       while ( $res = $req->fetch(PDO::FETCH_OBJ) )
       {
        $this->nom    = $res->ico_nom;
        $this->image   = $res->ico_image;
        $this->defaut   = $res->ico_defaut;
       }
       $this->close();
      }
     }
     
     /// Enregistre les infos dans la bdd
     public function __save(){
      $this->__connect();
      /// modification
      if($this->id)
      {
       $req = $this->connexion->prepare("UPDATE icones SET 
              ico_nom=:ico_nom,
              ico_image=:ico_image,
              ico_defaut =:ico_defaut 
             WHERE ico_id=:ico_id
            ");
       $req->bindParam(':ico_id', $this->id);
      }
      /// insertion
      else
      {
       $req = $this->connexion->prepare("INSERT INTO icones 
             (
              ico_nom,
              ico_image,
              ico_defaut 
             )
             VALUES
             (
              :ico_nom,
              :ico_image,
              :ico_defaut 
             )
            ");
      }
      $req->bindParam(':ico_nom'     , $this->nom);
      $req->bindParam(':ico_image'     , $this->image);
      $req->bindParam(':ico_defaut'     , $this->defaut);
      $req->execute();
      if(! $this->id){ $this->id = $this->connexion->lastInsertId(); }
     }
     
     /// Supprime les infos de la base
     public function __delete(){
      if($this->id)
      {
       $this->__connect();
       $this->connexion->query("DELETE FROM icones WHERE ico_id = ".$this->id);
       $this->close();
      }
     }
     
     /// Retourne : Identifiant de l'icone
     public function getId(){
      return $this->id; 
     }
     /// Retourne : Nom de l'icone
     public function getNom(){
      return $this->nom; 
     }
     /// Permet de définir/modifier : Nom de l'icone
     public function setNom($nom){
     
      $this->nom = $nom;
     }
     
     /// Retourne : Nom de l'image
     public function getImage(){
      return $this->image; 
     }
     /// Permet de définir/modifier : Nom de l'image
     public function setImage($image){
      $this->image = $image;
     }
     
     /// Retourne : Définit si l'icone est selectionné par defaut
     public function getDefaut(){
      return $this->defaut; 
     }
     /// Permet de définir/modifier : Définit si l'icone est selectionné par defaut
     public function setDefaut($defaut){
      $this->defaut = $defaut;
     }
     
    }
    ?>
    Toutes mes références en ligne : http://www.developpeur-web-php.fr

  2. #2
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    c'est clair que niveau performances c'est pas très bon, tu fais plusieurs requêtes là où t'en as besoin d'une seule. En plus tu sembles ouvrir/fermer la connexion à chaque fois. Tu pourrais te faire une classe qui gère un set d'icônes.
    D'autre part, tout ça pourrait être plus générique en passant par des classes Record et RecordsSet, avec des méthodes setField, setFields, getField par exemple.
    Bye
    Vive les roues en pierre

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Dans les changements que tu pourrais apporter il y à un truc tout simple. Tu as défnis une méthode, pour lire, ecrire, supprimer, rajoutes en une peupler. qui prend en paramètre une ligne de résultats SQL, tuples, et peuple l'objet de ces informations.
    Ainsi au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $t_object[] = new icones($res->ico_id);
    on fera quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $t_object[] = icones::peupler($res);
    Sinon pourquoi nommer ta classe iconeS avec un s, et donc ecrire la ligne suivante pour instancier une icone :
    Tu seras d'accord, je l'espère, pour dire que c'est étrange.


    Citation Envoyé par Djakisback Voir le message
    D'autre part, tout ça pourrait être plus générique en passant par des classes Record et RecordsSet, avec des méthodes setField, setFields, getField par exemple.
    Bye
    Sinon, oui, mais pas pour améliorer les perf.

    a plus

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    'Rajouter une classe Record et une RecordSet pour améliorer les perfs ?'

    Je vois pas pourquoi ...

  5. #5
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 022
    Points : 2 273
    Points
    2 273
    Par défaut
    1) La remarque a déjà été faite.
    2) En plus c'est pas si bidon que ça, si tu charges 5 classes dans ton script avec 12 setters et 12 getters que tu pourrais remplacer par une seule méthode dans une classe parent, a priori ta pile d'appels sera moins sollicitée et tu mettras moins de temps à parser tes fichiers...
    Vive les roues en pierre

Discussions similaires

  1. Performance réseau des classes IO vs NIO
    Par Kher78 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 13/03/2009, 17h19
  2. [debutant] Comment ajouter des .class ?
    Par Slein dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/04/2004, 14h30
  3. Créer les get et set des classes
    Par cameleon2002 dans le forum JBuilder
    Réponses: 3
    Dernier message: 17/09/2003, 21h03
  4. specifier les chemins des .class
    Par draken dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/07/2003, 09h35
  5. Inserer des classes java existantes
    Par 2000 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 20/03/2003, 12h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo