Un site a été fait par un de mes prédécesseurs.
Ce site est un peu lent. J'ai donc essayé d'identifier pourquoi le site n'était pas réactif.
Après quelques recherches, il semble que ce soit l'éxécution php qui pose problème. Ce site est en php, et il utilise une base Oracle. Les requêtes faites directement sur la bases semblent très correctes au niveau du temps d'éxécution. Je n'ai pas remarqué de problème particulier.
J'ai donc cherché un peu plus dans le code PHP en utilisant mktime() pour savoir quelles étaient les parties "critiques", et je me suis apperçu qu'il y avait des appels de requêtes très imbriquées.
Le développeur utilise un fichier "select.php" pour toutes ses requêtes select . Ce fichier est parfois appelé dans des boucles elle-même contenues dans d'autres boucles while.
Clairement, c'est d'ici que vient le problème. Evidemment, il y a de gros accès disques à chaque fois et la lenteur doit provenir de cette façon de procéder.
Le problème est qu'il faudrait retoucher toutes les pages php ou il y a des boucles imbriquées avec des requêtes à l'intérieur. Bien sur, je pense que je vais devoir faire ce travail un peu plus tard, mais j'aimerais déjà m'attarder sur ce fameux "select.php" qui est appelé presque partout.
En effet, si j'arrive à optimiser ce fichier, alors tout le site sera plus rapide.
Il s'agit d'un fichier qui fait une requête sql sur la base Oracle, et qui remet les données correctement dans un tableau.
Pour cela, il y a 2 boucles imbriquées. Je me demande donc s'il est possible d'optimiser ce traitement php au maximum afin d'accélérer tout le site.
Voici le fichier "select.php" :
Si vous avez une idée pour l'optimisation de cette partie, je serai très intéressé. J'ai aussi une idée vague, mais je préfère avoir quelques avis supplémentaires de façon à ne pas passer à coté de quelque chose.
Merci d'avoir lu jusqu'ici
Ce site est un peu lent. J'ai donc essayé d'identifier pourquoi le site n'était pas réactif.
Après quelques recherches, il semble que ce soit l'éxécution php qui pose problème. Ce site est en php, et il utilise une base Oracle. Les requêtes faites directement sur la bases semblent très correctes au niveau du temps d'éxécution. Je n'ai pas remarqué de problème particulier.
J'ai donc cherché un peu plus dans le code PHP en utilisant mktime() pour savoir quelles étaient les parties "critiques", et je me suis apperçu qu'il y avait des appels de requêtes très imbriquées.
Le développeur utilise un fichier "select.php" pour toutes ses requêtes select . Ce fichier est parfois appelé dans des boucles elle-même contenues dans d'autres boucles while.
Clairement, c'est d'ici que vient le problème. Evidemment, il y a de gros accès disques à chaque fois et la lenteur doit provenir de cette façon de procéder.
Le problème est qu'il faudrait retoucher toutes les pages php ou il y a des boucles imbriquées avec des requêtes à l'intérieur. Bien sur, je pense que je vais devoir faire ce travail un peu plus tard, mais j'aimerais déjà m'attarder sur ce fameux "select.php" qui est appelé presque partout.
En effet, si j'arrive à optimiser ce fichier, alors tout le site sera plus rapide.
Il s'agit d'un fichier qui fait une requête sql sur la base Oracle, et qui remet les données correctement dans un tableau.
Pour cela, il y a 2 boucles imbriquées. Je me demande donc s'il est possible d'optimiser ce traitement php au maximum afin d'accélérer tout le site.
Voici le fichier "select.php" :
Bloc de code:
<?php
//Il suffit de mette en commentaire error_reporting pour faire du
//dÈbogage - voir quand il n'y a aucun rÈsultat "NO DATA FOUND" par exemple.
error_reporting(0);
//CrÈe un tableau, un curseur, compte les colonnes,
//fait le fetch en insÈrant dans le tableau.
$results = array();
$ora_cur = ora_do($ora_conn, $sql);
if($ora_cur){
//Nombre de colonnes
$numCols = ora_numcols($ora_cur);
//Prends la premiËre ligne et la met dans le tableau
$row = array();
//Parcours les colonnes de la requete
for($i=0; $i<$numCols; $i++){
$row[ora_columnname($ora_cur, $i)] = ora_getcolumn($ora_cur,$i);
}
array_push($results,$row);
// "Fetch" des lignes, une par une, en crÈant un tableau pour chaque ligne.
// Chaque tableau est insÈrÈ ? la suite du tableau $results.
while(ora_fetch($ora_cur)){ // Pour chaque ligne
$row = array();
for($i=0; $i<$numCols; $i++){ // Chaque colonne
$row[ora_columnname($ora_cur, $i)] = ora_getcolumn($ora_cur,$i);
}
array_push($results,$row);
}
}
// Le fameux error_reporting. Mettre en commentaire pour voir les NO_DATA_FOUND.
error_reporting(1);
//print_r($results) pour vÈrifier le contenu
?>
Si vous avez une idée pour l'optimisation de cette partie, je serai très intéressé. J'ai aussi une idée vague, mais je préfère avoir quelques avis supplémentaires de façon à ne pas passer à coté de quelque chose.
Merci d'avoir lu jusqu'ici