Bonjour a tous,
voila sans plus attendre mon problème.
Je travaille sur un site qui va servir a ressencer les votes d'utilisateurs au sujet de fichiers .doc .
Quand je me suis lancer dans ce projet j'ai tout de suite commence a reflechir en poo.
J'ai commence par faire un petit diagrame uml pour representer les principales classes.
UML simplifie du projet
Voila en gros comment ca fonctionne : pour chaque classe list on a une classe associee et lors de l'instanciation de la classe list on va aller chercher dans la bdd toute les donnees et pour chaque entree on va instancier la classe "non liste" et l'ajoutee a la liste.
Le probleme c'est la vitesse de chargement des pages.
J'ai une page par exemple ou je ressence tout les fichier et pour chaque fichier je ressence le vote et le commentaire de chaque utilisateur. Cette page ave ma poo se charger en 10sec environs et sans en 2 sec environs. Sans poo je veux dire en mettant directement les requettes dans la page.
Je met une partie du code de ces deux pages :
Code avec la pooCode sans poo
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 <?php include '../class/ConnexionPDO.class.php'; //include '../php/fonctions.php'; date_default_timezone_set('America/Montreal'); $date = date('m/j/Y'); include '../class/Ballot.class.php'; include '../class/BallotsList.class.php'; include '../class/Comment.class.php'; include '../class/CommentsList.class.php'; include '../class/Standard.class.php'; include '../class/StandardsList.class.php'; include '../class/User.class.php'; include '../class/UsersList.class.php'; $bList = new BallotsList(); $cList = new CommentsList(); $sList = new StandardsList(); $uList = new UsersList(); $pdo = null; ?> ... <?php foreach($sList->getStandards() as $s) { $yes = 0; $no = 0; echo '<h2>'.$s->getName().'</h2>'; echo ' <div id = "wasSend'.$s->getNum().'" class="notification notification_green hide"> <b>GREAT! Your email was send.</b><div class="notification_close"> Close </div> </div> '; echo '<table id="tablo" style = "width : 99%;margin-right:1%;"> <tr><th>Name</th><th>Vote</th><th>Comment</th><th></th></tr>'; foreach($uList->getList() as $u) { if($u->getCommitee() == 'subcommitee') { $b = $bList->getByStandName($s->getNum(), $u->getNum()); if(!$b) { $b = ' - '; $c = 0; } else { $c = $cList->getByTargetNameType($b->getNum(), $u->getNum(), 1); switch($b->getValue()) { case 0 : $b = 'No'; $no++; break; case 1 : $b = 'Yes'; $yes++; break; case 2 : $b = 'Yes'; $yes++; break; case 3 : $b = 'Abstain'; $yes++; break; } } if(!$c) { $c = ''; } else { $c = $c->getText(); if(strlen($c) > 100) { $c = substr($c, 0, 100). ' [...]'; } } echo '<tr><td>'.$u->getName().'</td><td><center>'.$b.'</center></td><td style = "text-align : justify;">'.$c.'</td><td><center><a href = "fichePerso.php?id='.$u->getNum().'">Details</a></center></td></tr>'; } } echo '<tr><td><b>Result</b></td><td style = "width : 100px;">Positive : <span style = "color : green;">'.$yes.'</span><br /> Negative : <span style = "color : red;">'.$no.'</span></td><td> </td><td><center><input type = "button" value = "Send" id = "'.$s->getNum().','.$yes.','.$no.'" name = "'.$s->getNum().'" onClick = "sendEmail(this)"/></center></td></tr>'; echo '</table>'; } ?>Et un exemple des classe (elle sont toute plus ou moins semblable) :
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 <?php $pdo = new PDO(HOST, USERNAME, PASSWORD); foreach($pdo->query('SELECT * FROM standards') as $s) { $yes = 0; $no = 0; echo '<h2>'.$s['name'].'</h2>'; echo ' <div id = "wasSend'.$s['id'].'" class="notification notification_green hide"> <b>GREAT! Your email was send.</b><div class="notification_close"> Close </div> </div> '; echo '<table id="tablo" style = "width : 99%;margin-right:1%;"> <tr><th>Name</th><th>Vote</th><th>Comment</th><th></th></tr>'; foreach($pdo->query('SELECT * FROM users') as $u) { if($u['commitee'] == 'subcommitee') { $b = $pdo->query('SELECT * FROM ballots WHERE standard = '.$s['id'].' AND name = '.$u['id']); if(!$b = $b->fetch()) { $b = ' - '; $c = 0; } else { $c = $pdo->query('SELECT * FROM comments WHERE commentOf = '.$b['id'].' AND commentBy = '.$u['id'].' AND type = 1'); switch($b['value']) { case 0 : $b = 'No'; $no++; break; case 1 : $b = 'Yes'; $yes++; break; case 2 : $b = 'Yes'; $yes++; break; case 3 : $b = 'Abstain'; $yes++; break; } } if($c === 0) { $c = ''; } else { $c = $c->fetch(); $c = $c['text']; if(strlen($c) > 100) { $c = substr($c, 0, 100). ' [...]'; } } echo '<tr><td>'.$u['firstName'].' '.$u['lastName'].'</td><td><center>'.$b.'</center></td><td style = "text-align : justify;">'.$c.'</td><td><center><a href = "fichePerso.php?id='.$u['id'].'">Details</a></center></td></tr>'; } } echo '<tr><td><b>Result</b></td><td style = "width : 100px;">Positive : <span style = "color : green;">'.$yes.'</span><br /> Negative : <span style = "color : red;">'.$no.'</span></td><td> </td><td><center><input type = "button" value = "Send" id = "'.$s['id'].','.$yes.','.$no.'" name = "'.$s['id'].'" onClick = "sendEmail(this)"/></center></td></tr>'; echo '</table>'; } ?>
Liste"non Liste"
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 <?php class BallotsList { private $bList = array(); private $nb; function __construct() { $this->creerList(); } private function creerList() { $pdo = new PDO(HOST, USERNAME, PASSWORD); $nb = 0; foreach($pdo->query('SELECT * FROM ballots') as $b) { $ballot = new Ballot($b['id'], $b['standard'], $b['name'], $b['value']); array_push($this->bList, $ballot); $nb++; } $this->nb = $nb; } function getList() { return $this->bList; } function getByNum($n) { foreach($this->bList as $b) { if($b->getNum() == $n) return $b; } } function getByStandard($s) { $resultats = array(); foreach($this->bList as $b) { if($b->getStandard() == $s) { array_push($resultats, $b); } } return $resultats; } function getByName($n) { $resultats = array(); foreach($this->bList as $b) { if($b->getName() == $n) { array_push($resultats, $b); } } return $resultats; } function getByStandName($s, $n) { foreach($this->bList as $b) { if($b->getName() == $n && $b->getStandard() == $s) { return $b; } } return false; } } ?>Voila, merci d'avance pour votre aide!
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 <?php class Ballot { private $num; private $standard; private $name; private $value; // 0 = no with comment, 1 = yes, 2 = yes with comment, 3 = abstain function __construct($n, $s, $na, $v) { $pdo = new PDO(HOST, USERNAME, PASSWORD); if($n == '') { $insert = 1; $n = $pdo->query('SELECT max(id) as id FROM ballots'); $n = $n->fetch(); $this->num = $n['id'] + 1; } else { $insert = 0; $this->num = $n; } $this->standard = $s; $this->name = $na; $this->value = $v; if($insert) { $pdo->query('INSERT INTO ballots (id, standard, name, value) VALUES ('.$this->num.', '.$this->standard.', '.$this->name.', '.$this->value.')'); } } function getNum() { return $this->num; } function getStandard() { return $this->standard; } function getName() { return $this->name; } function getValue() { return $this->value; } function setStandard($s) { $pdo = new PDO(HOST, USERNAME, PASSWORD); $pdo->query('UPDATE ballots SET standard = '.$s.' WHERE id = '.$this->getNum()); $this->standard = $s; } function setName($n) { $pdo = new PDO(HOST, USERNAME, PASSWORD); $pdo->query('UPDATE ballots SET name = '.$n.' WHERE id = '.$this->getNum()); $this->name = $n; } function setValue($v) { $pdo = new PDO(HOST, USERNAME, PASSWORD); $pdo->query('UPDATE ballots SET value = '.$v.' WHERE id = '.$this->getNum()); $this->value = $v; } } ?>
Partager